Built with
doc-gen4 , running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+β Ctrl+β to navigate,
Ctrl+π±οΈ to focus.
On Mac, use
Cmd instead of
Ctrl .
import ECTate.Algebra.Ring.Basic
import Mathlib.Tactic.NormNum
import Mathlib.Tactic.Ring
import Mathlib.Tactic.SimpTrace
import Mathlib.Tactic.PrintPrefix
import Mathlib.Tactic.LibrarySearch
import Mathlib.Util.WhatsNew
#print def CommGroup.toDivisionCommMonoid.{u_1} : {G : Type u_1} β [inst : CommGroup G] β DivisionCommMonoid G :=
fun {G} [inst : CommGroup G] =>
let src := inst;
let src_1 := Group.toDivisionMonoid;
DivisionCommMonoid.mk (_ : β (a b : G), a * b = b * a) CommGroup.toDivisionCommMonoid
#print def AddCommGroup.toDivisionCommMonoid.{u_1} : {G : Type u_1} β [inst : AddCommGroup G] β SubtractionCommMonoid G :=
fun {G} [inst : AddCommGroup G] =>
let src := inst;
let src_1 := AddGroup.toSubtractionMonoid;
SubtractionCommMonoid.mk (_ : β (a b : G), a + b = b + a) AddCommGroup.toDivisionCommMonoid -- TODO LOL
attribute [ instance ] AddCommGroup.toDivisionCommMonoid
section ring_with_neg
namespace ring_neg
variable { R : Type _ : Type (?u.2290 + 1)
Type _} [ Ring : Type ?u.1077 β Type ?u.1077
Ring R ]
lemma sub_add_comm' : β {x y z : R }, x - y + z = x + z - y sub_add_comm' { x y z : R } : ( x - y ) + z = x + z - y :=
by R : Type u_1 instβ : Ring R x, y, z : R rw [ R : Type u_1 instβ : Ring R x, y, z : R sub_eq_add_neg : β {G : Type ?u.266 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, R : Type u_1 instβ : Ring R x, y, z : R R : Type u_1 instβ : Ring R x, y, z : R sub_eq_add_neg : β {G : Type ?u.351 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, R : Type u_1 instβ : Ring R x, y, z : R R : Type u_1 instβ : Ring R x, y, z : R add_assoc : β {G : Type ?u.397 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, R : Type u_1 instβ : Ring R x, y, z : R R : Type u_1 instβ : Ring R x, y, z : R add_assoc : β {G : Type ?u.541 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, R : Type u_1 instβ : Ring R x, y, z : R R : Type u_1 instβ : Ring R x, y, z : R add_comm z R : Type u_1 instβ : Ring R x, y, z : R ]
lemma neg_mul_neg : β {y z : R }, - y * - z = y * z neg_mul_neg { y z : R } : - y * - z = y * z :=
by R : Type u_1 instβ : Ring R y, z : R simp [β neg_mul_left : β {R : Type ?u.878 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left, β neg_mul_right : β {R : Type ?u.901 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, neg_neg ]
lemma neg_pow_three : β {R : Type u_1 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three { y : R } : (- y )^ 3 = - ( y ^ 3 ) :=
by R : Type u_1 instβ : Ring R y : R simp [ pow_succ : β {M : Type ?u.1482 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, mul_assoc : β {G : Type ?u.1498 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc] R : Type u_1 instβ : Ring R y : R ; R : Type u_1 instβ : Ring R y : R R : Type u_1 instβ : Ring R y : R simp [ neg_mul_neg : β {R : Type ?u.2071 } [inst : Ring R ] {y z : R }, - y * - z = y * z neg_mul_neg] R : Type u_1 instβ : Ring R y : R ; R : Type u_1 instβ : Ring R y : R R : Type u_1 instβ : Ring R y : R rw [ R : Type u_1 instβ : Ring R y : R neg_mul_left : β {R : Type ?u.2250 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_leftR : Type u_1 instβ : Ring R y : R ]
lemma sub_sub' : β {R : Type u_1 } [inst : Ring R ] {x y z : R }, x - (y - z ) = x + z - y sub_sub' { x y z : R } : ( x - ( y - z )) = x + z - y :=
by R : Type u_1 instβ : Ring R x, y, z : R simp [ sub_eq_add_neg : β {G : Type ?u.2517 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, neg_add , add_assoc : β {G : Type ?u.2552 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, add_comm z ]
-- lemma add_sub {x y z : R} : (x + (y - z)) = x + y - z :=
-- by simp [sub_eq_add_neg, add_assoc]
-- lemma neg_pow_four {y : R} : (- y)^4 = (y ^ 4) :=
-- by simp [pow_succ]; asso simp [neg_mul_neg]
-- lemma neg_add_eq_sub {y z : R} : - y + z = z - y :=
-- by rw [sub_eq_add_neg, add_comm z]
lemma sub_add_cancel : β {y z : R }, y - z + z = y sub_add_cancel { y z : R } : y - z + z = y :=
by R : Type u_1 instβ : Ring R y, z : R rw [ R : Type u_1 instβ : Ring R y, z : R sub_eq_add_neg : β {G : Type ?u.3517 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R add_assoc : β {G : Type ?u.3602 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assocR : Type u_1 instβ : Ring R y, z : R ] R : Type u_1 instβ : Ring R y, z : R ; R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R simp
lemma add_sub_cancel : β {R : Type u_1 } [inst : Ring R ] {y z : R }, y + z - z = y add_sub_cancel { y z : R } : y + z - z = y :=
by R : Type u_1 instβ : Ring R y, z : R rw [ R : Type u_1 instβ : Ring R y, z : R sub_eq_add_neg : β {G : Type ?u.4083 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R add_assoc : β {G : Type ?u.4168 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assocR : Type u_1 instβ : Ring R y, z : R ] R : Type u_1 instβ : Ring R y, z : R ; R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R simp
lemma sub_neg : β {R : Type u_1 } [inst : Ring R ] {y z : R }, y - - z = y + z sub_neg { y z : R } : y - - z = y + z :=
by R : Type u_1 instβ : Ring R y, z : R simp [ sub_eq_add_neg : β {G : Type ?u.4663 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg]
-- lemma sub_eq_iff_eq_add {x y z : R} : y - z = x β y = x + z :=
-- by
-- constructor
-- . intro h
-- rw [β h]
-- simp [sub_add_cancel]
-- . intro h
-- rw [h]
-- simp [add_sub_cancel]
-- lemma eq_sub_iff_add_eq {x y z : R} : x = y - z β x + z = y :=
-- by
-- constructor
-- . intro h
-- rw [h]
-- simp [sub_add_cancel]
-- . intro h
-- rw [β h]
-- simp [add_sub_cancel]
lemma neg_eq_neg_iff : β {y z : R }, - z = - y β y = z neg_eq_neg_iff { y z : R } : - z = - y β y = z :=
by R : Type u_1 instβ : Ring R y, z : R rw [ R : Type u_1 instβ : Ring R y, z : R β zero_add : β {M : Type ?u.4982 } [inst : AddZeroClass M ] (a : M ), 0 + a = a zero_add (- z ), R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R β sub_eq_add_neg : β {G : Type ?u.5046 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, R : Type u_1 instβ : Ring R y, z : R
R : Type u_1 instβ : Ring R y, z : R β zero_add : β {M : Type ?u.5142 } [inst : AddZeroClass M ] (a : M ), 0 + a = a zero_add (- y ), R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R β sub_eq_add_neg : β {G : Type ?u.5151 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, R : Type u_1 instβ : Ring R y, z : R
R : Type u_1 instβ : Ring R y, z : R sub_eq_iff_eq_add : β {G : Type ?u.5201 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R sub_add_comm , R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R add_zero : β {M : Type ?u.5344 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R eq_sub_iff_add_eq : β {G : Type ?u.5425 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, R : Type u_1 instβ : Ring R y, z : R R : Type u_1 instβ : Ring R y, z : R zero_add : β {M : Type ?u.5464 } [inst : AddZeroClass M ] (a : M ), 0 + a = a zero_addR : Type u_1 instβ : Ring R y, z : R ]
end ring_neg
end ring_with_neg
variable { R : Type u } [ IntegralDomain : Type ?u.8261 β Type ?u.8261
IntegralDomain R ]
section Obvious
lemma add4 : 2 + 2 = ( 4 : R ) := by norm_num
lemma mul4 : 2 * 2 = ( 4 : R ) := by norm_num
end Obvious
structure Model ( R : Type u ) [ IntegralDomain : Type ?u.6134 β Type ?u.6134
IntegralDomain R ] where
a1 : R
a2 : R
a3 : R
a4 : R
a6 : R
deriving Inhabited : Sort u β Sort (max 1 u)
Inhabited, DecidableEq : Sort u β Sort (max 1 u)
DecidableEq
namespace Model
instance [ Repr : Type ?u.8269 β Type ?u.8269
Repr R ] : Repr : Type ?u.8272 β Type ?u.8272
Repr ( Model : (R : Type ?u.8273 ) β [inst : IntegralDomain R ] β Type ?u.8273 Model R ) := β¨ Ξ» ( e : Model : (R : Type ?u.8286 ) β [inst : IntegralDomain R ] β Type ?u.8286 Model R ) _ => repr ( e . a1 , e . a2 , e . a3 , e . a4 , e . a6 )β©
def b2 ( e : Model : (R : Type ?u.8662 ) β [inst : IntegralDomain R ] β Type ?u.8662 Model R ) : R := e . a1 * e . a1 + 4 * e . a2
def b4 ( e : Model : (R : Type ?u.9191 ) β [inst : IntegralDomain R ] β Type ?u.9191 Model R ) : R := e . a1 * e . a3 + 2 * e . a4
def b6 ( e : Model : (R : Type ?u.9639 ) β [inst : IntegralDomain R ] β Type ?u.9639 Model R ) : R := e . a3 * e . a3 + 4 * e . a6
def b8 ( e : Model : (R : Type ?u.10086 ) β [inst : IntegralDomain R ] β Type ?u.10086 Model R ) : R :=
e . a1 * e . a1 * e . a6 - e . a1 * e . a3 * e . a4 + 4 * e . a2 * e . a6 + e . a2 * e . a3 * e . a3 - e . a4 * e . a4
/-- From Connell -/
def b5 ( e : Model : (R : Type ?u.11186 ) β [inst : IntegralDomain R ] β Type ?u.11186 Model R ) : R := e . a1 * e . a4 - 2 * e . a2 * e . a3
def b7 ( e : Model : (R : Type ?u.11631 ) β [inst : IntegralDomain R ] β Type ?u.11631 Model R ) : R := e . a1 * ( e . a3 ^ 2 - 12 * e . a6 ) + 8 * e . a3 * e . a4
open ring_neg in
lemma b8_identity ( e : Model : (R : Type ?u.12645 ) β [inst : IntegralDomain R ] β Type ?u.12645 Model R ) : 4 * e . b8 = e . b2 * e . b6 - e . b4 ^ 2 :=
by
simp only [ b2 , b4 , b6 , b8 ] 4 * (e .a1 * e .a1 * e .a6 - e .a1 * e .a3 * e .a4 + 4 * e .a2 * e .a6 + e .a2 * e .a3 * e .a3 - e .a4 * e .a4 ) = (e .a1 * e .a1 + 4 * e .a2 ) * (e .a3 * e .a3 + 4 * e .a6 ) - (e .a1 * e .a3 + 2 * e .a4 ) ^ 2
simp only [ sub_add_comm' : β {R : Type ?u.13373 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.13397 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub' : β {R : Type ?u.13427 } [inst : Ring R ] {x y z : R }, x - (y - z ) = x + z - y sub_sub', pow_succ : β {M : Type ?u.13439 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.13449 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.13469 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.13483 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.13495 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.13507 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.13519 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, sub_add , pow_zero : β {M : Type ?u.13543 } [inst : Monoid M ] (a : M ), a ^ 0 = 1 pow_zero, mul_one : β {M : Type ?u.13551 } [inst : MulOneClass M ] (a : M ), a * 1 = a mul_one] 4 * (e .a1 * e .a1 * e .a6 ) + 4 * (4 * e .a2 * e .a6 ) + 4 * (e .a2 * e .a3 * e .a3 ) - 4 * (e .a1 * e .a3 * e .a4 ) - 4 * (e .a4 * e .a4 ) = e .a1 * e .a1 * (e .a3 * e .a3 ) + 4 * e .a2 * (e .a3 * e .a3 ) + (e .a1 * e .a1 * (4 * e .a6 ) + 4 * e .a2 * (4 * e .a6 ) ) - (e .a1 * e .a3 * (e .a1 * e .a3 ) + 2 * e .a4 * (e .a1 * e .a3 ) + (e .a1 * e .a3 * (2 * e .a4 ) + 2 * e .a4 * (2 * e .a4 ) ) )
simp only [ eq_sub_iff_add_eq : β {G : Type ?u.13879 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.13909 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm' : β {R : Type ?u.13939 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm'] 4 * (e .a1 * e .a1 * e .a6 ) + 4 * (4 * e .a2 * e .a6 ) + 4 * (e .a2 * e .a3 * e .a3 ) + (e .a1 * e .a3 * (e .a1 * e .a3 ) + 2 * e .a4 * (e .a1 * e .a3 ) + (e .a1 * e .a3 * (2 * e .a4 ) + 2 * e .a4 * (2 * e .a4 ) ) ) = e .a1 * e .a1 * (e .a3 * e .a3 ) + 4 * e .a2 * (e .a3 * e .a3 ) + (e .a1 * e .a1 * (4 * e .a6 ) + 4 * e .a2 * (4 * e .a6 ) ) + 4 * (e .a4 * e .a4 ) + 4 * (e .a1 * e .a3 * e .a4 )
ring
def c4 ( e : Model : (R : Type ?u.16153 ) β [inst : IntegralDomain R ] β Type ?u.16153 Model R ) : R := e . b2 ^ 2 - 24 * e . b4
def c6 ( e : Model : (R : Type ?u.16706 ) β [inst : IntegralDomain R ] β Type ?u.16706 Model R ) : R := - e . b2 ^ 3 + 36 * e . b2 * e . b4 - 216 * e . b6
def discr ( e : Model : (R : Type ?u.17634 ) β [inst : IntegralDomain R ] β Type ?u.17634 Model R ) : R :=
- e . b2 * e . b2 * e . b8 - 8 * e . b4 ^ 3 - 27 * e . b6 * e . b6 + 9 * e . b2 * e . b4 * e . b6
open ring_neg in
lemma discr_identity ( e : Model : (R : Type ?u.19022 ) β [inst : IntegralDomain R ] β Type ?u.19022 Model R ) : 1728 * e . discr = e . c4 ^ 3 - e . c6 ^ 2 :=
by
simp only [ c4 , c6 , discr ]
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
simp only [β sub_add_comm , neg_pow_three : β {R : Type ?u.19925 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.19967 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.19977 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.19997 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.20011 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.20023 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.20035 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.20047 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, sub_add ]
rw [ ( by ring : 1728 * (e.b2 * e.b2 * e.b8) = 432 * (e.b2 * e.b2 * (4 * e.b8))) ]
rw [ b8_identity ]
simp [ neg_pow_three : β {R : Type ?u.22517 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.22547 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.22557 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left, β neg_mul_right : β {R : Type ?u.22571 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right,
mul_add : β {R : Type ?u.22585 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.22597 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.22609 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.22621 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, sub_add , add_sub : β {G : Type ?u.22645 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub]
simp [ eq_sub_iff_add_eq : β {G : Type ?u.32863 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.32887 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm' : β {R : Type ?u.32906 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_add_eq_sub , add_sub : β {G : Type ?u.32928 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub]
ring
def rst_iso ( r s t : R ) ( e : Model : (R : Type ?u.40556 ) β [inst : IntegralDomain R ] β Type ?u.40556 Model R ) : Model : (R : Type ?u.40563 ) β [inst : IntegralDomain R ] β Type ?u.40563 Model R := {
a1 := e . a1 + 2 * s ,
a2 := e . a2 - s * e . a1 + 3 * r - s * s ,
a3 := e . a3 + r * e . a1 + 2 * t ,
a4 := e . a4 - s * e . a3 + 2 * r * e . a2 - ( t + r * s )* e . a1 + 3 * r * r - 2 * s * t ,
a6 := e . a6 + r * e . a4 + r * r * e . a2 + r * r * r - t *( e . a3 + t + r * e . a1 )
}
lemma rst_b2 ( r s t : R ) ( e : Model : (R : Type ?u.43501 ) β [inst : IntegralDomain R ] β Type ?u.43501 Model R ) : ( rst_iso r s t e ). b2 = e . b2 + 12 * r := by
simp [ rst_iso , b2 , one_mul : β {M : Type ?u.43771 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, one_pow : β {R : Type ?u.43788 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, sub_eq_add_neg : β {G : Type ?u.43805 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, mul_add : β {R : Type ?u.43821 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.43845 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul] e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r
rw [ e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r mul_comm : β {G : Type ?u.45862 } [inst : CommSemigroup G ] (a b : G ), a * b = b * a mul_comm _ ( 2 * s ), e .a1 * e .a1 + 2 * s * e .a1 + (2 * s * e .a1 + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r mul_assoc : β {G : Type ?u.45982 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc 2 , e .a1 * e .a1 + 2 * (s * e .a1 ) + (2 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_assoc : β {G : Type ?u.46113 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc ( e . a1 * e . a1 ), e .a1 * e .a1 + (2 * (s * e .a1 ) + (2 * (s * e .a1 ) + 2 * s * (2 * s ) ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β add_assoc : β {G : Type ?u.46213 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc ( 2 *( s * e . a1 )), e .a1 * e .a1 + (2 * (s * e .a1 ) + 2 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β add_mul : β {R : Type ?u.46330 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, e .a1 * e .a1 + ((2 + 2 ) * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add4 , e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + 2 * s * e .a1 + (e .a1 * (2 * s ) + 2 * s * (2 * s ) ) + (4 * e .a2 + 4 * - (s * e .a1 ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β neg_mul_right : β {R : Type ?u.46431 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_righte .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r ] e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r
rw [ e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β mul_assoc : β {G : Type ?u.46472 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc ( 2 * s ), e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * 2 * s ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r mul_comm : β {G : Type ?u.46542 } [inst : CommSemigroup G ] (a b : G ), a * b = b * a mul_comm _ 2 , e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * (2 * s ) * s ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β mul_assoc : β {G : Type ?u.46597 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc 2 , e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * 2 * s * s ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r mul4 , e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * s * s ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β neg_mul_right : β {R : Type ?u.46735 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * s * s ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 2 * s * (2 * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + 4 * - (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r mul_assoc : β {G : Type ?u.46763 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc 4 s s e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r ] e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r
rw [ e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_comm ( 4 *( s * e . a1 )), e .a1 * e .a1 + (4 * (s * s ) + 4 * (s * e .a1 ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_comm ( 4 * e . a2 ), e .a1 * e .a1 + (4 * (s * s ) + 4 * (s * e .a1 ) ) + (- (4 * (s * e .a1 ) ) + 4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_assoc : β {G : Type ?u.47026 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, e .a1 * e .a1 + (4 * (s * s ) + 4 * (s * e .a1 ) + (- (4 * (s * e .a1 ) ) + 4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_assoc : β {G : Type ?u.47118 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, e .a1 * e .a1 + (4 * (s * s ) + (4 * (s * e .a1 ) + (- (4 * (s * e .a1 ) ) + 4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_comm ( 4 *( s * s )), e .a1 * e .a1 + (4 * (s * e .a1 ) + (- (4 * (s * e .a1 ) ) + 4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) + 4 * (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * (s * e .a1 ) + 4 * (s * s ) ) + (4 * e .a2 + - (4 * (s * e .a1 ) ) + 4 * (3 * r ) + - (4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r β add_assoc : β {G : Type ?u.47328 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoce .a1 * e .a1 + (4 * (s * e .a1 ) + (- (4 * (s * e .a1 ) ) + 4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) ) + 4 * (s * s ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r ] e .a1 * e .a1 + (4 * (s * e .a1 ) + (- (4 * (s * e .a1 ) ) + 4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) ) + 4 * (s * s ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r
simp [β add_assoc : β {G : Type ?u.47425 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc ( 4 *( s * e . a1 ))] e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) + 4 * (s * s ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r
rw [ e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) + 4 * (s * s ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_assoc : β {G : Type ?u.47980 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) + 4 * (s * s ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) + 4 * (s * s ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r add_assoc : β {G : Type ?u.48072 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc, e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + (- (4 * (s * s ) ) + 4 * (s * s ) ) ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + - (4 * (s * s ) ) ) + 4 * (s * s ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r neg_add_self : β {G : Type ?u.48170 } [inst : AddGroup G ] (a : G ), - a + a = 0 neg_add_self ( 4 *( s * s )) e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + 0 ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r ] e .a1 * e .a1 + (4 * e .a2 + 4 * (3 * r ) + 0 ) = e .a1 * e .a1 + 4 * e .a2 + 12 * r
ring
open ring_neg in
lemma rst_b4 ( r s t : R ) ( e : Model : (R : Type ?u.48943 ) β [inst : IntegralDomain R ] β Type ?u.48943 Model R ) :
( rst_iso r s t e ). b4 = e . b4 + r * ( e . b2 + 6 * r ) :=
by
simp only [ rst_iso , b2 , b4 ] (e .a1 + 2 * s ) * (e .a3 + r * e .a1 + 2 * t ) + 2 * (e .a4 - s * e .a3 + 2 * r * e .a2 - (t + r * s ) * e .a1 + 3 * r * r - 2 * s * t ) = e .a1 * e .a3 + 2 * e .a4 + r * (e .a1 * e .a1 + 4 * e .a2 + 6 * r )
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
simp only [β sub_add_comm , neg_pow_three : β {R : Type ?u.49557 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.49599 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.49609 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.49629 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.49643 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.49655 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.49667 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.49679 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, sub_add ] e .a1 * e .a3 + 2 * s * e .a3 + (e .a1 * (r * e .a1 ) + 2 * s * (r * e .a1 ) ) + (e .a1 * (2 * t ) + 2 * s * (2 * t ) ) + (2 * e .a4 - (2 * (t * e .a1 ) + 2 * (r * s * e .a1 ) - (2 * (2 * r * e .a2 ) - (2 * (s * e .a3 ) - (2 * (3 * r * r ) - 2 * (2 * s * t ) ) ) ) ) ) = e .a1 * e .a3 + 2 * e .a4 + (r * (e .a1 * e .a1 ) + r * (4 * e .a2 ) + r * (6 * r ) )
simp [ eq_sub_iff_add_eq : β {G : Type ?u.50238 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.50262 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm , neg_add_eq_sub , add_sub : β {G : Type ?u.50303 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub] e .a1 * e .a3 + 2 * s * e .a3 + (e .a1 * (r * e .a1 ) + 2 * s * (r * e .a1 ) ) + (e .a1 * (2 * t ) + 2 * s * (2 * t ) ) + 2 * e .a4 + 2 * (2 * r * e .a2 ) + 2 * (3 * r * r ) = e .a1 * e .a3 + 2 * e .a4 + (r * (e .a1 * e .a1 ) + r * (4 * e .a2 ) + r * (6 * r ) ) + (2 * (t * e .a1 ) + 2 * (r * s * e .a1 ) ) + 2 * (s * e .a3 ) + 2 * (2 * s * t )
ring
open ring_neg in
lemma rst_b6 ( r s t : R ) ( e : Model : (R : Type ?u.53435 ) β [inst : IntegralDomain R ] β Type ?u.53435 Model R ) :
( rst_iso r s t e ). b6 = e . b6 + 2 * r * e . b4 + r * r * e . b2 + 4 * r * r * r :=
by
simp only [ rst_iso , b2 , b4 , b6 ] (e .a3 + r * e .a1 + 2 * t ) * (e .a3 + r * e .a1 + 2 * t ) + 4 * (e .a6 + r * e .a4 + r * r * e .a2 + r * r * r - t * (e .a3 + t + r * e .a1 ) ) = e .a3 * e .a3 + 4 * e .a6 + 2 * r * (e .a1 * e .a3 + 2 * e .a4 ) + r * r * (e .a1 * e .a1 + 4 * e .a2 ) + 4 * r * r * r
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
simp only [β sub_add_comm , neg_pow_three : β {R : Type ?u.54373 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.54415 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.54425 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.54445 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.54459 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.54471 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.54483 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.54495 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, sub_add ] e .a3 * e .a3 + r * e .a1 * e .a3 + 2 * t * e .a3 + (e .a3 * (r * e .a1 ) + r * e .a1 * (r * e .a1 ) + 2 * t * (r * e .a1 ) ) + (e .a3 * (2 * t ) + r * e .a1 * (2 * t ) + 2 * t * (2 * t ) ) + (4 * e .a6 + 4 * (r * e .a4 ) + 4 * (r * r * e .a2 ) + 4 * (r * r * r ) - (4 * (t * e .a3 ) + 4 * (t * t ) + 4 * (t * (r * e .a1 ) ) ) ) = e .a3 * e .a3 + 4 * e .a6 + (2 * r * (e .a1 * e .a3 ) + 2 * r * (2 * e .a4 ) ) + (r * r * (e .a1 * e .a1 ) + r * r * (4 * e .a2 ) ) + 4 * r * r * r
simp [ eq_sub_iff_add_eq : β {G : Type ?u.54792 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.54816 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm , neg_add_eq_sub , add_sub : β {G : Type ?u.54857 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub] e .a3 * e .a3 + r * e .a1 * e .a3 + 2 * t * e .a3 + (e .a3 * (r * e .a1 ) + r * e .a1 * (r * e .a1 ) + 2 * t * (r * e .a1 ) ) + (e .a3 * (2 * t ) + r * e .a1 * (2 * t ) + 2 * t * (2 * t ) ) + (4 * e .a6 + 4 * (r * e .a4 ) + 4 * (r * r * e .a2 ) + 4 * (r * r * r ) ) = e .a3 * e .a3 + 4 * e .a6 + (2 * r * (e .a1 * e .a3 ) + 2 * r * (2 * e .a4 ) ) + (r * r * (e .a1 * e .a1 ) + r * r * (4 * e .a2 ) ) + 4 * r * r * r + (4 * (t * e .a3 ) + 4 * (t * t ) + 4 * (t * (r * e .a1 ) ) )
ring
open ring_neg in
lemma rst_b8 ( r s t : R ) ( e : Model : (R : Type ?u.57887 ) β [inst : IntegralDomain R ] β Type ?u.57887 Model R ) :
( rst_iso r s t e ). b8 = e . b8 + 3 * r * e . b6 + 3 * r * r * e . b4 + r * r * r * e . b2 + 3 * r * r * r * r :=
by
simp only [ rst_iso , b2 , b4 , b6 , b8 , one_mul : β {M : Type ?u.58858 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, one_pow : β {R : Type ?u.58875 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow] (e .a1 + 2 * s ) * (e .a1 + 2 * s ) * (e .a6 + r * e .a4 + r * r * e .a2 + r * r * r - t * (e .a3 + t + r * e .a1 ) ) - (e .a1 + 2 * s ) * (e .a3 + r * e .a1 + 2 * t ) * (e .a4 - s * e .a3 + 2 * r * e .a2 - (t + r * s ) * e .a1 + 3 * r * r - 2 * s * t ) + 4 * (e .a2 - s * e .a1 + 3 * r - s * s ) * (e .a6 + r * e .a4 + r * r * e .a2 + r * r * r - t * (e .a3 + t + r * e .a1 ) ) + (e .a2 - s * e .a1 + 3 * r - s * s ) * (e .a3 + r * e .a1 + 2 * t ) * (e .a3 + r * e .a1 + 2 * t ) - (e .a4 - s * e .a3 + 2 * r * e .a2 - (t + r * s ) * e .a1 + 3 * r * r - 2 * s * t ) * (e .a4 - s * e .a3 + 2 * r * e .a2 - (t + r * s ) * e .a1 + 3 * r * r - 2 * s * t ) = e .a1 * e .a1 * e .a6 - e .a1 * e .a3 * e .a4 + 4 * e .a2 * e .a6 + e .a2 * e .a3 * e .a3 - e .a4 * e .a4 + 3 * r * (e .a3 * e .a3 + 4 * e .a6 ) + 3 * r * r * (e .a1 * e .a3 + 2 * e .a4 ) + r * r * r * (e .a1 * e .a1 + 4 * e .a2 ) + 3 * r * r * r * r
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
simp [ sub_add_comm' : β {R : Type ?u.59088 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.59112 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.59148 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.59158 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.59178 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.59192 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.59204 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.59216 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.59228 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul] e .a1 * e .a1 * e .a6 + 2 * s * e .a1 * e .a6 + (e .a1 * (2 * s ) * e .a6 + 2 * s * (2 * s ) * e .a6 ) + (e .a1 * e .a1 * (r * e .a4 ) + 2 * s * e .a1 * (r * e .a4 ) + (e .a1 * (2 * s ) * (r * e .a4 ) + 2 * s * (2 * s ) * (r * e .a4 ) ) ) + (e .a1 * e .a1 * (r * r * e .a2 ) + 2 * s * e .a1 * (r * r * e .a2 ) + (e .a1 * (2 * s ) * (r * r * e .a2 ) + 2 * s * (2 * s ) * (r * r * e .a2 ) ) ) + (e .a1 * e .a1 * (r * r * r ) + 2 * s * e .a1 * (r * r * r ) + (e .a1 * (2 * s ) * (r * r * r ) + 2 * s * (2 * s ) * (r * r * r ) ) ) + (4 * e .a2 * e .a6 + 4 * (3 * r ) * e .a6 + (4 * e .a2 * (r * e .a4 ) + 4 * (3 * r ) * (r * e .a4 ) - (4 * (s * e .a1 ) * (r * e .a4 ) + 4 * (s * s ) * (r * e .a4 ) ) ) + (4 * e .a2 * (r * r * e .a2 ) + 4 * (3 * r ) * (r * r * e .a2 ) - (4 * (s * e .a1 ) * (r * r * e .a2 ) + 4 * (s * s ) * (r * r * e .a2 ) ) ) + (4 * e .a2 * (r * r * r ) + 4 * (3 * r ) * (r * r * r ) - (4 * (s * e .a1 ) * (r * r * r ) + 4 * (s * s ) * (r * r * r ) ) ) - (4 * (s * e .a1 ) * e .a6 + 4 * (s * s ) * e .a6 + (4 * e .a2 * (t * e .a3 ) + 4 * (3 * r ) * (t * e .a3 ) + (4 * e .a2 * (t * t ) + 4 * (3 * r ) * (t * t ) - (4 * (s * e .a1 ) * (t * t ) + 4 * (s * s ) * (t * t ) ) ) + (4 * e .a2 * (t * (r * e .a1 ) ) + 4 * (3 * r ) * (t * (r * e .a1 ) ) - (4 * (s * e .a1 ) * (t * (r * e .a1 ) ) + 4 * (s * s ) * (t * (r * e .a1 ) ) ) ) - (4 * (s * e .a1 ) * (t * e .a3 ) + 4 * (s * s ) * (t * e .a3 ) ) ) ) ) + (e .a2 * e .a3 * e .a3 + 3 * r * e .a3 * e .a3 + (e .a2 * (r * e .a1 ) * e .a3 + 3 * r * (r * e .a1 ) * e .a3 - (s * e .a1 * (r * e .a1 ) * e .a3 + s * s * (r * e .a1 ) * e .a3 ) ) + (e .a2 * (2 * t ) * e .a3 + 3 * r * (2 * t ) * e .a3 - (s * e .a1 * (2 * t ) * e .a3 + s * s * (2 * t ) * e .a3 ) ) + (e .a2 * e .a3 * (r * e .a1 ) + 3 * r * e .a3 * (r * e .a1 ) + (e .a2 * (r * e .a1 ) * (r * e .a1 ) + 3 * r * (r * e .a1 ) * (r * e .a1 ) - (s * e .a1 * (r * e .a1 ) * (r * e .a1 ) + s * s * (r * e .a1 ) * (r * e .a1 ) ) ) + (e .a2 * (2 * t ) * (r * e .a1 ) + 3 * r * (2 * t ) * (r * e .a1 ) - (s * e .a1 * (2 * t ) * (r * e .a1 ) + s * s * (2 * t ) * (r * e .a1 ) ) ) - (s * e .a1 * e .a3 * (r * e .a1 ) + s * s * e .a3 * (r * e .a1 ) ) ) + (e .a2 * e .a3 * (2 * t ) + 3 * r * e .a3 * (2 * t ) + (e .a2 * (r * e .a1 ) * (2 * t ) + 3 * r * (r * e .a1 ) * (2 * t ) - (s * e .a1 * (r * e .a1 ) * (2 * t ) + s * s * (r * e .a1 ) * (2 * t ) ) ) + (e .a2 * (2 * t ) * (2 * t ) + 3 * r * (2 * t ) * (2 * t ) - (s * e .a1 * (2 * t ) * (2 * t ) + s * s * (2 * t ) * (2 * t ) ) ) - (s * e .a1 * e .a3 * (2 * t ) + s * s * e .a3 * (2 * t ) ) ) - (s * e .a1 * e .a3 * e .a3 + s * s * e .a3 * e .a3 ) ) - (e .a1 * e .a1 * (t * e .a3 ) + 2 * s * e .a1 * (t * e .a3 ) + (e .a1 * (2 * s ) * (t * e .a3 ) + 2 * s * (2 * s ) * (t * e .a3 ) ) + (e .a1 * e .a1 * (t * t ) + 2 * s * e .a1 * (t * t ) + (e .a1 * (2 * s ) * (t * t ) + 2 * s * (2 * s ) * (t * t ) ) ) + (e .a1 * e .a1 * (t * (r * e .a1 ) ) + 2 * s * e .a1 * (t * (r * e .a1 ) ) + (e .a1 * (2 * s ) * (t * (r * e .a1 ) ) + 2 * s * (2 * s ) * (t * (r * e .a1 ) ) ) ) + (e .a1 * e .a3 * e .a4 + 2 * s * e .a3 * e .a4 + (e .a1 * (r * e .a1 ) * e .a4 + 2 * s * (r * e .a1 ) * e .a4 ) + (e .a1 * (2 * t ) * e .a4 + 2 * s * (2 * t ) * e .a4 ) + (e .a1 * e .a3 * (2 * r * e .a2 ) + 2 * s * e .a3 * (2 * r * e .a2 ) + (e .a1 * (r * e .a1 ) * (2 * r * e .a2 ) + 2 * s * (r * e .a1 ) * (2 * r * e .a2 ) ) + (e .a1 * (2 * t ) * (2 * r * e .a2 ) + 2 * s * (2 * t ) * (2 * r * e .a2 ) ) ) + (e .a1 * e .a3 * (3 * r * r ) + 2 * s * e .a3 * (3 * r * r ) + (e .a1 * (r * e .a1 ) * (3 * r * r ) + 2 * s * (r * e .a1 ) * (3 * r * r ) ) + (e .a1 * (2 * t ) * (3 * r * r ) + 2 * s * (2 * t ) * (3 * r * r ) ) ) - (e .a1 * e .a3 * (s * e .a3 ) + 2 * s * e .a3 * (s * e .a3 ) + (e .a1 * (r * e .a1 ) * (s * e .a3 ) + 2 * s * (r * e .a1 ) * (s * e .a3 ) ) + (e .a1 * (2 * t ) * (s * e .a3 ) + 2 * s * (2 * t ) * (s * e .a3 ) ) + (e .a1 * e .a3 * (t * e .a1 ) + 2 * s * e .a3 * (t * e .a1 ) + (e .a1 * (r * e .a1 ) * (t * e .a1 ) + 2 * s * (r * e .a1 ) * (t * e .a1 ) ) + (e .a1 * (2 * t ) * (t * e .a1 ) + 2 * s * (2 * t ) * (t * e .a1 ) ) + (e .a1 * e .a3 * (r * s * e .a1 ) + 2 * s * e .a3 * (r * s * e .a1 ) + (e .a1 * (r * e .a1 ) * (r * s * e .a1 ) + 2 * s * (r * e .a1 ) * (r * s * e .a1 ) ) + (e .a1 * (2 * t ) * (r * s * e .a1 ) + 2 * s * (2 * t ) * (r * s * e .a1 ) ) ) ) + (e .a1 * e .a3 * (2 * s * t ) + 2 * s * e .a3 * (2 * s * t ) + (e .a1 * (r * e .a1 ) * (2 * s * t ) + 2 * s * (r * e .a1 ) * (2 * s * t ) ) + (e .a1 * (2 * t ) * (2 * s * t ) + 2 * s * (2 * t ) * (2 * s * t ) ) ) ) ) + (e .a4 * e .a4 + 2 * r * e .a2 * e .a4 + 3 * r * r * e .a4 + (e .a4 * (2 * r * e .a2 ) + 2 * r * e .a2 * (2 * r * e .a2 ) + 3 * r * r * (2 * r * e .a2 ) - (s * e .a3 * (2 * r * e .a2 ) + (t * e .a1 * (2 * r * e .a2 ) + r * s * e .a1 * (2 * r * e .a2 ) ) + 2 * s * t * (2 * r * e .a2 ) ) ) + (e .a4 * (3 * r * r ) + 2 * r * e .a2 * (3 * r * r ) + 3 * r * r * (3 * r * r ) - (s * e .a3 * (3 * r * r ) + (t * e .a1 * (3 * r * r ) + r * s * e .a1 * (3 * r * r ) ) + 2 * s * t * (3 * r * r ) ) ) - (s * e .a3 * e .a4 + (t * e .a1 * e .a4 + r * s * e .a1 * e .a4 ) + 2 * s * t * e .a4 + (e .a4 * (s * e .a3 ) + 2 * r * e .a2 * (s * e .a3 ) + 3 * r * r * (s * e .a3 ) + (e .a4 * (t * e .a1 ) + 2 * r * e .a2 * (t * e .a1 ) + 3 * r * r * (t * e .a1 ) + (e .a4 * (r * s * e .a1 ) + 2 * r * e .a2 * (r * s * e .a1 ) + 3 * r * r * (r * s * e .a1 ) - (s * e .a3 * (r * s * e .a1 ) + (t * e .a1 * (r * s * e .a1 ) + r * s * e .a1 * (r * s * e .a1 ) ) + 2 * s * t * (r * s * e .a1 ) ) ) - (s * e .a3 * (t * e .a1 ) + (t * e .a1 * (t * e .a1 ) + r * s * e .a1 * (t * e .a1 ) ) + 2 * s * t * (t * e .a1 ) ) ) + (e .a4 * (2 * s * t ) + 2 * r * e .a2 * (2 * s * t ) + 3 * r * r * (2 * s * t ) - (s * e .a3 * (2 * s * t ) + (t * e .a1 * (2 * s * t ) + r * s * e .a1 * (2 * s * t ) ) + 2 * s * t * (2 * s * t ) ) ) - (s * e .a3 * (s * e .a3 ) + (t * e .a1 * (s * e .a3 ) + r * s * e .a1 * (s * e .a3 ) ) + 2 * s * t * (s * e .a3 ) ) ) ) ) ) = e .a1 * e .a1 * e .a6 + 4 * e .a2 * e .a6 + e .a2 * e .a3 * e .a3 + (3 * r * (e .a3 * e .a3 ) + 3 * r * (4 * e .a6 ) ) + (3 * r * r * (e .a1 * e .a3 ) + 3 * r * r * (2 * e .a4 ) ) + (r * r * r * (e .a1 * e .a1 ) + r * r * r * (4 * e .a2 ) ) + 3 * r * r * r * r - (e .a1 * e .a3 * e .a4 + e .a4 * e .a4 )
simp [ eq_sub_iff_add_eq : β {G : Type ?u.80736 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.80760 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm' : β {R : Type ?u.80779 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_add_eq_sub , add_sub : β {G : Type ?u.80801 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub, sub_add ] e .a1 * e .a1 * e .a6 + 2 * s * e .a1 * e .a6 + (e .a1 * (2 * s ) * e .a6 + 2 * s * (2 * s ) * e .a6 ) + (e .a1 * e .a1 * (r * e .a4 ) + 2 * s * e .a1 * (r * e .a4 ) + (e .a1 * (2 * s ) * (r * e .a4 ) + 2 * s * (2 * s ) * (r * e .a4 ) ) ) + (e .a1 * e .a1 * (r * r * e .a2 ) + 2 * s * e .a1 * (r * r * e .a2 ) + (e .a1 * (2 * s ) * (r * r * e .a2 ) + 2 * s * (2 * s ) * (r * r * e .a2 ) ) ) + (e .a1 * e .a1 * (r * r * r ) + 2 * s * e .a1 * (r * r * r ) + (e .a1 * (2 * s ) * (r * r * r ) + 2 * s * (2 * s ) * (r * r * r ) ) ) + (4 * e .a2 * e .a6 + 4 * (3 * r ) * e .a6 + (4 * e .a2 * (r * e .a4 ) + 4 * (3 * r ) * (r * e .a4 ) ) + (4 * e .a2 * (r * r * e .a2 ) + 4 * (3 * r ) * (r * r * e .a2 ) ) + (4 * e .a2 * (r * r * r ) + 4 * (3 * r ) * (r * r * r ) ) ) + (e .a2 * e .a3 * e .a3 + 3 * r * e .a3 * e .a3 + (e .a2 * (r * e .a1 ) * e .a3 + 3 * r * (r * e .a1 ) * e .a3 ) + (e .a2 * (2 * t ) * e .a3 + 3 * r * (2 * t ) * e .a3 ) + (e .a2 * e .a3 * (r * e .a1 ) + 3 * r * e .a3 * (r * e .a1 ) + (e .a2 * (r * e .a1 ) * (r * e .a1 ) + 3 * r * (r * e .a1 ) * (r * e .a1 ) ) + (e .a2 * (2 * t ) * (r * e .a1 ) + 3 * r * (2 * t ) * (r * e .a1 ) ) ) + (e .a2 * e .a3 * (2 * t ) + 3 * r * e .a3 * (2 * t ) + (e .a2 * (r * e .a1 ) * (2 * t ) + 3 * r * (r * e .a1 ) * (2 * t ) ) + (e .a2 * (2 * t ) * (2 * t ) + 3 * r * (2 * t ) * (2 * t ) ) ) ) + (e .a1 * e .a3 * e .a4 + e .a4 * e .a4 ) + (s * e .a3 * e .a4 + (t * e .a1 * e .a4 + r * s * e .a1 * e .a4 ) + 2 * s * t * e .a4 + (e .a4 * (s * e .a3 ) + 2 * r * e .a2 * (s * e .a3 ) + 3 * r * r * (s * e .a3 ) + (e .a4 * (t * e .a1 ) + 2 * r * e .a2 * (t * e .a1 ) + 3 * r * r * (t * e .a1 ) + (e .a4 * (r * s * e .a1 ) + 2 * r * e .a2 * (r * s * e .a1 ) + 3 * r * r * (r * s * e .a1 ) ) ) + (e .a4 * (2 * s * t ) + 2 * r * e .a2 * (2 * s * t ) + 3 * r * r * (2 * s * t ) ) ) ) + (s * e .a3 * (3 * r * r ) + (t * e .a1 * (3 * r * r ) + r * s * e .a1 * (3 * r * r ) ) + 2 * s * t * (3 * r * r ) ) + (s * e .a3 * (2 * r * e .a2 ) + (t * e .a1 * (2 * r * e .a2 ) + r * s * e .a1 * (2 * r * e .a2 ) ) + 2 * s * t * (2 * r * e .a2 ) ) + (e .a1 * e .a3 * (s * e .a3 ) + 2 * s * e .a3 * (s * e .a3 ) + (e .a1 * (r * e .a1 ) * (s * e .a3 ) + 2 * s * (r * e .a1 ) * (s * e .a3 ) ) + (e .a1 * (2 * t ) * (s * e .a3 ) + 2 * s * (2 * t ) * (s * e .a3 ) ) + (e .a1 * e .a3 * (t * e .a1 ) + 2 * s * e .a3 * (t * e .a1 ) + (e .a1 * (r * e .a1 ) * (t * e .a1 ) + 2 * s * (r * e .a1 ) * (t * e .a1 ) ) + (e .a1 * (2 * t ) * (t * e .a1 ) + 2 * s * (2 * t ) * (t * e .a1 ) ) + (e .a1 * e .a3 * (r * s * e .a1 ) + 2 * s * e .a3 * (r * s * e .a1 ) + (e .a1 * (r * e .a1 ) * (r * s * e .a1 ) + 2 * s * (r * e .a1 ) * (r * s * e .a1 ) ) + (e .a1 * (2 * t ) * (r * s * e .a1 ) + 2 * s * (2 * t ) * (r * s * e .a1 ) ) ) ) + (e .a1 * e .a3 * (2 * s * t ) + 2 * s * e .a3 * (2 * s * t ) + (e .a1 * (r * e .a1 ) * (2 * s * t ) + 2 * s * (r * e .a1 ) * (2 * s * t ) ) + (e .a1 * (2 * t ) * (2 * s * t ) + 2 * s * (2 * t ) * (2 * s * t ) ) ) ) + (4 * (s * e .a1 ) * (t * e .a3 ) + 4 * (s * s ) * (t * e .a3 ) ) + (4 * (s * e .a1 ) * (t * (r * e .a1 ) ) + 4 * (s * s ) * (t * (r * e .a1 ) ) ) + (4 * (s * e .a1 ) * (t * t ) + 4 * (s * s ) * (t * t ) ) = e .a1 * e .a1 * e .a6 + 4 * e .a2 * e .a6 + e .a2 * e .a3 * e .a3 + (3 * r * (e .a3 * e .a3 ) + 3 * r * (4 * e .a6 ) ) + (3 * r * r * (e .a1 * e .a3 ) + 3 * r * r * (2 * e .a4 ) ) + (r * r * r * (e .a1 * e .a1 ) + r * r * r * (4 * e .a2 ) ) + 3 * r * r * r * r + (e .a1 * e .a1 * (t * e .a3 ) + 2 * s * e .a1 * (t * e .a3 ) + (e .a1 * (2 * s ) * (t * e .a3 ) + 2 * s * (2 * s ) * (t * e .a3 ) ) + (e .a1 * e .a1 * (t * t ) + 2 * s * e .a1 * (t * t ) + (e .a1 * (2 * s ) * (t * t ) + 2 * s * (2 * s ) * (t * t ) ) ) + (e .a1 * e .a1 * (t * (r * e .a1 ) ) + 2 * s * e .a1 * (t * (r * e .a1 ) ) + (e .a1 * (2 * s ) * (t * (r * e .a1 ) ) + 2 * s * (2 * s ) * (t * (r * e .a1 ) ) ) ) + (e .a1 * e .a3 * e .a4 + 2 * s * e .a3 * e .a4 + (e .a1 * (r * e .a1 ) * e .a4 + 2 * s * (r * e .a1 ) * e .a4 ) + (e .a1 * (2 * t ) * e .a4 + 2 * s * (2 * t ) * e .a4 ) + (e .a1 * e .a3 * (2 * r * e .a2 ) + 2 * s * e .a3 * (2 * r * e .a2 ) + (e .a1 * (r * e .a1 ) * (2 * r * e .a2 ) + 2 * s * (r * e .a1 ) * (2 * r * e .a2 ) ) + (e .a1 * (2 * t ) * (2 * r * e .a2 ) + 2 * s * (2 * t ) * (2 * r * e .a2 ) ) ) + (e .a1 * e .a3 * (3 * r * r ) + 2 * s * e .a3 * (3 * r * r ) + (e .a1 * (r * e .a1 ) * (3 * r * r ) + 2 * s * (r * e .a1 ) * (3 * r * r ) ) + (e .a1 * (2 * t ) * (3 * r * r ) + 2 * s * (2 * t ) * (3 * r * r ) ) ) ) + (e .a4 * e .a4 + 2 * r * e .a2 * e .a4 + 3 * r * r * e .a4 + (e .a4 * (2 * r * e .a2 ) + 2 * r * e .a2 * (2 * r * e .a2 ) + 3 * r * r * (2 * r * e .a2 ) ) + (e .a4 * (3 * r * r ) + 2 * r * e .a2 * (3 * r * r ) + 3 * r * r * (3 * r * r ) ) ) ) + (s * e .a3 * (s * e .a3 ) + (t * e .a1 * (s * e .a3 ) + r * s * e .a1 * (s * e .a3 ) ) + 2 * s * t * (s * e .a3 ) ) + (s * e .a3 * (2 * s * t ) + (t * e .a1 * (2 * s * t ) + r * s * e .a1 * (2 * s * t ) ) + 2 * s * t * (2 * s * t ) ) + (s * e .a3 * (t * e .a1 ) + (t * e .a1 * (t * e .a1 ) + r * s * e .a1 * (t * e .a1 ) ) + 2 * s * t * (t * e .a1 ) ) + (s * e .a3 * (r * s * e .a1 ) + (t * e .a1 * (r * s * e .a1 ) + r * s * e .a1 * (r * s * e .a1 ) ) + 2 * s * t * (r * s * e .a1 ) ) + (s * e .a1 * e .a3 * e .a3 + s * s * e .a3 * e .a3 ) + (s * e .a1 * e .a3 * (2 * t ) + s * s * e .a3 * (2 * t ) ) + (s * e .a1 * (2 * t ) * (2 * t ) + s * s * (2 * t ) * (2 * t ) ) + (s * e .a1 * (r * e .a1 ) * (2 * t ) + s * s * (r * e .a1 ) * (2 * t ) ) + (s * e .a1 * e .a3 * (r * e .a1 ) + s * s * e .a3 * (r * e .a1 ) ) + (s * e .a1 * (2 * t ) * (r * e .a1 ) + s * s * (2 * t ) * (r * e .a1 ) ) + (s * e .a1 * (r * e .a1 ) * (r * e .a1 ) + s * s * (r * e .a1 ) * (r * e .a1 ) ) + (s * e .a1 * (2 * t ) * e .a3 + s * s * (2 * t ) * e .a3 ) + (s * e .a1 * (r * e .a1 ) * e .a3 + s * s * (r * e .a1 ) * e .a3 ) + (4 * (s * e .a1 ) * e .a6 + 4 * (s * s ) * e .a6 + (4 * e .a2 * (t * e .a3 ) + 4 * (3 * r ) * (t * e .a3 ) + (4 * e .a2 * (t * t ) + 4 * (3 * r ) * (t * t ) ) + (4 * e .a2 * (t * (r * e .a1 ) ) + 4 * (3 * r ) * (t * (r * e .a1 ) ) ) ) ) + (4 * (s * e .a1 ) * (r * r * r ) + 4 * (s * s ) * (r * r * r ) ) + (4 * (s * e .a1 ) * (r * r * e .a2 ) + 4 * (s * s ) * (r * r * e .a2 ) ) + (4 * (s * e .a1 ) * (r * e .a4 ) + 4 * (s * s ) * (r * e .a4 ) )
ring
open ring_neg in
lemma rst_discr ( r s t : R ) ( e : Model : (R : Type ?u.153641 ) β [inst : IntegralDomain R ] β Type ?u.153641 Model R ) : ( rst_iso r s t e ). discr = e . discr :=
by
simp only [ discr , rst_b2 , rst_b4 , rst_b6 , rst_b8 ]
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
simp only [ sub_add_comm' : β {R : Type ?u.154055 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.154079 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.154121 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.154131 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.154151 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.154165 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.154177 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.154189 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.154201 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, pow_zero : β {M : Type ?u.154213 } [inst : Monoid M ] (a : M ), a ^ 0 = 1 pow_zero, mul_one : β {M : Type ?u.154221 } [inst : MulOneClass M ] (a : M ), a * 1 = a mul_one, one_mul : β {M : Type ?u.154232 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
rw [ ( by ring : b2 e * (12 * r) * b8 e = b2 e * (3 * r) * (4 * b8 e)),
( by ring : 12 * r * b2 e * b8 e = 3 * r * b2 e * (4 * b8 e)),
( by ring : 12 * r * (12 * r) * b8 e = 3 * r * 12 * r * (4 * b8 e)) ]
simp only [ b8_identity ]
simp only [β sub_add_comm , neg_pow_three : β {R : Type ?u.159054 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.159084 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.159094 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.159108 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.159122 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.159134 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.159146 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.159158 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, pow_zero : β {M : Type ?u.159170 } [inst : Monoid M ] (a : M ), a ^ 0 = 1 pow_zero]
simp only [ eq_sub_iff_add_eq : β {G : Type ?u.159322 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.159346 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm' : β {R : Type ?u.159365 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', β sub_eq_add_neg : β {G : Type ?u.159377 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg,
neg_add_eq_sub , add_sub : β {G : Type ?u.159410 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub, β sub_add ]
ring
def weierstrass : Model R β R Γ R β R weierstrass ( e : Model : (R : Type ?u.180652 ) β [inst : IntegralDomain R ] β Type ?u.180652 Model R ) ( P : R Γ R ) : R :=
P . 2 : {Ξ± : Type ?u.180679 } β {Ξ² : Type ?u.180678 } β Ξ± Γ Ξ² β Ξ² 2 ^ 2 + e . a1 * P . 1 : {Ξ± : Type ?u.180706 } β {Ξ² : Type ?u.180705 } β Ξ± Γ Ξ² β Ξ± 1 * P . 2 : {Ξ± : Type ?u.180710 } β {Ξ² : Type ?u.180709 } β Ξ± Γ Ξ² β Ξ² 2 + e . a3 * P . 2 : {Ξ± : Type ?u.180720 } β {Ξ² : Type ?u.180719 } β Ξ± Γ Ξ² β Ξ² 2 - ( P . 1 : {Ξ± : Type ?u.180736 } β {Ξ² : Type ?u.180735 } β Ξ± Γ Ξ² β Ξ± 1 ^ 3 + e . a2 * P . 1 : {Ξ± : Type ?u.180759 } β {Ξ² : Type ?u.180758 } β Ξ± Γ Ξ² β Ξ± 1 ^ 2 + e . a4 * P . 1 : {Ξ± : Type ?u.180779 } β {Ξ² : Type ?u.180778 } β Ξ± Γ Ξ² β Ξ± 1 + e . a6 )
--partial derivation library?
def dweierstrass_dx : Model R β R Γ R β R dweierstrass_dx ( e : Model : (R : Type ?u.182668 ) β [inst : IntegralDomain R ] β Type ?u.182668 Model R ) ( P : R Γ R ) : R :=
e . a1 * P . 2 : {Ξ± : Type ?u.182694 } β {Ξ² : Type ?u.182693 } β Ξ± Γ Ξ² β Ξ² 2 - ( 3 * P . 1 : {Ξ± : Type ?u.182722 } β {Ξ² : Type ?u.182721 } β Ξ± Γ Ξ² β Ξ± 1 ^ 2 + 2 * e . a2 * P . 1 : {Ξ± : Type ?u.182755 } β {Ξ² : Type ?u.182754 } β Ξ± Γ Ξ² β Ξ± 1 + e . a4 )
def dweierstrass_dy : Model R β R Γ R β R dweierstrass_dy ( e : Model : (R : Type ?u.183824 ) β [inst : IntegralDomain R ] β Type ?u.183824 Model R ) ( P : R Γ R ) : R :=
2 * P . 2 : {Ξ± : Type ?u.183858 } β {Ξ² : Type ?u.183857 } β Ξ± Γ Ξ² β Ξ² 2 + e . a1 * P . 1 : {Ξ± : Type ?u.183872 } β {Ξ² : Type ?u.183871 } β Ξ± Γ Ξ² β Ξ± 1 + e . a3
open ring_neg in
/--
We can compute the discriminant in terms of these using `Singular.jl`, part of `OSCAR`
```julia
julia> using Oscar
julia> R, ( x, y, a1, a2, a3, a4, a6 ) = PolynomialRing( ZZ, [ "x", "y", "a1", "a2", "a3", "a4", "a6" ] )
(Singular Polynomial Ring (ZZ),(x,y,a1,a2,a3,a4,a6),(dp(7),C), spoly{n_Z}[x, y, a1, a2, a3, a4, a6])
julia> I = Ideal( R, [2*y + a1*x + a3,y*a1 - (3*x^2 + 2*a2*x + a4), y ^2 + a1*x*y + a3*y - (x^3 + a2*x^2 + a4*x + a6)] )
Singular ideal over Singular Polynomial Ring (ZZ),(x,y,a1,a2,a3,a4,a6),(dp(7),C) with generators (x*a1 + 2*y + a3, -3*x^2 + y*a1 - 2*x*a2 - a4, -x^3 + x*y*a1 - x^2*a2 + y^2 + y*a3 - x*a4 - a6)
julia> IE = eliminate(eliminate(I, x), y)
Singular ideal over Singular Polynomial Ring (ZZ),(x,y,a1,a2,a3,a4,a6),(dp(7),C) with generators (a1^4*a2*a3^2 - a1^5*a3*a4 + a1^6*a6 + 8*a1^2*a2^2*a3^2 - a1^3*a3^3 - 8*a1^3*a2*a3*a4 - a1^4*a4^2 + 12*a1^4*a2*a6 + 16*a2^3*a3^2 - 36*a1*a2*a3^3 - 16*a1*a2^2*a3*a4 + 30*a1^2*a3^2*a4 - 8*a1^2*a2*a4^2 + 48*a1^2*a2^2*a6 - 36*a1^3*a3*a6 + 27*a3^4 - 72*a2*a3^2*a4 - 16*a2^2*a4^2 + 96*a1*a3*a4^2 + 64*a2^3*a6 - 144*a1*a2*a3*a6 - 72*a1^2*a4*a6 + 64*a4^3 + 216*a3^2*a6 - 288*a2*a4*a6 + 432*a6^2)
julia> lift(I, IE)[1][1]
-x^2*a1^5*gen(1)+y*a1^6*gen(1)-x*a1^5*a2*gen(1)-x*y*a1^4*gen(1)-y*a1^5*gen(2)-a1^6*gen(3)-9*x^2*a1^3*a2*gen(1)+x*a1^4*a2*gen(2)+11*y*a1^4*a2*gen(1)-10*x*a1^3*a2^2*gen(1)+x*a1^4*a3*gen(1)+a1^4*a2*a3*gen(1)-a1^5*a4*gen(1)-4*x*y*a1^3*gen(2)-6*y^2*a1^3*gen(1)-8*x*y*a1^2*a2*gen(1)-10*y*a1^3*a2*gen(2)-12*a1^4*a2*gen(3)-24*x^2*a1*a2^2*gen(1)+8*x*a1^2*a2^2*gen(2)+40*y*a1^2*a2^2*gen(1)-32*x*a1*a2^3*gen(1)+30*x^2*a1^2*a3*gen(1)-2*x*a1^3*a3*gen(2)-35*y*a1^3*a3*gen(1)+38*x*a1^2*a2*a3*gen(1)-a1^3*a2*a3*gen(2)+8*a1^2*a2^2*a3*gen(1)-a1^3*a3^2*gen(1)+3*x*a1^3*a4*gen(1)+a1^4*a4*gen(2)-9*a1^3*a2*a4*gen(1)+12*y*a1^3*gen(3)-32*x*y*a1*a2*gen(2)-48*y^2*a1*a2*gen(1)+32*x^2*a2^2*gen(2)+48*x*y*a2^2*gen(1)-32*y*a1*a2^2*gen(2)-48*a1^2*a2^2*gen(3)+32*x*a2^3*gen(2)+32*y*a2^3*gen(1)+24*x*y*a1*a3*gen(1)+28*y*a1^2*a3*gen(2)+36*a1^3*a3*gen(3)+30*x^2*a2*a3*gen(1)-46*x*a1*a2*a3*gen(2)-134*y*a1*a2*a3*gen(1)+76*x*a2^2*a3*gen(1)-8*a1*a2^2*a3*gen(2)+16*a2^3*a3*gen(1)-27*x*a1*a3^2*gen(1)+a1^2*a3^2*gen(2)-36*a1*a2*a3^2*gen(1)+60*x^2*a1*a4*gen(1)-58*y*a1^2*a4*gen(1)+84*x*a1*a2*a4*gen(1)+8*a1^2*a2*a4*gen(2)-24*a1*a2^2*a4*gen(1)+31*a1^2*a3*a4*gen(1)+96*y*a1*a2*gen(3)-96*x*a2^2*gen(3)-64*a2^3*gen(3)+96*x*y*a3*gen(2)+144*y^2*a3*gen(1)+52*y*a2*a3*gen(2)+168*a1*a2*a3*gen(3)+84*x*a3^2*gen(2)+198*y*a3^2*gen(1)+38*a2*a3^2*gen(2)+27*a3^3*gen(1)-96*x^2*a4*gen(2)-144*x*y*a4*gen(1)+56*y*a1*a4*gen(2)+60*a1^2*a4*gen(3)-112*x*a2*a4*gen(2)-120*y*a2*a4*gen(1)+16*a2^2*a4*gen(2)-168*x*a3*a4*gen(1)-36*a1*a3*a4*gen(2)-34*a2*a3*a4*gen(1)+60*a1*a4^2*gen(1)+36*x*a1*a6*gen(1)+12*a1^2*a6*gen(2)+24*a1*a2*a6*gen(1)-288*y*a3*gen(3)-252*a3^2*gen(3)+288*x*a4*gen(3)+240*a2*a4*gen(3)-64*a4^2*gen(2)+144*x*a6*gen(2)+216*y*a6*gen(1)+48*a2*a6*gen(2)-36*a3*a6*gen(1)-432*a6*gen(3)
```
-/
lemma discr_eq_neg_singular : β {R : Type u } [inst : IntegralDomain R ] (e : Model R ),
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 ) discr_eq_neg_singular ( e : Model : (R : Type ?u.184385 ) β [inst : IntegralDomain R ] β Type ?u.184385 Model R ) : e . discr = -(
e . a1 ^ 4 * e . a2 * e . a3 ^ 2 - e . a1 ^ 5 * e . a3 * e . a4 + e . a1 ^ 6 * e . a6 + 8 * e . a1 ^ 2 * e . a2 ^ 2 * e . a3 ^ 2 - e . a1 ^ 3 * e . a3 ^ 3
- 8 * e . a1 ^ 3 * e . a2 * e . a3 * e . a4 - e . a1 ^ 4 * e . a4 ^ 2 + 12 * e . a1 ^ 4 * e . a2 * e . a6 + 16 * e . a2 ^ 3 * e . a3 ^ 2
- 36 * e . a1 * e . a2 * e . a3 ^ 3 - 16 * e . a1 * e . a2 ^ 2 * e . a3 * e . a4 + 30 * e . a1 ^ 2 * e . a3 ^ 2 * e . a4 - 8 * e . a1 ^ 2 * e . a2 * e . a4 ^ 2
+ 48 * e . a1 ^ 2 * e . a2 ^ 2 * e . a6 - 36 * e . a1 ^ 3 * e . a3 * e . a6 + 27 * e . a3 ^ 4 - 72 * e . a2 * e . a3 ^ 2 * e . a4
- 16 * e . a2 ^ 2 * e . a4 ^ 2 + 96 * e . a1 * e . a3 * e . a4 ^ 2 + 64 * e . a2 ^ 3 * e . a6 - 144 * e . a1 * e . a2 * e . a3 * e . a6
- 72 * e . a1 ^ 2 * e . a4 * e . a6 + 64 * e . a4 ^ 3 + 216 * e . a3 ^ 2 * e . a6 - 288 * e . a2 * e . a4 * e . a6 + 432 * e . a6 ^ 2 )
:=
by
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 )simp [ discr , weierstrass , dweierstrass_dx , dweierstrass_dy , b2 , b4 , b6 , b8 ] (- (4 * e .a2 ) + - (e .a1 * e .a1 ) ) * (e .a1 * e .a1 + 4 * e .a2 ) * (e .a1 * e .a1 * e .a6 - e .a1 * e .a3 * e .a4 + 4 * e .a2 * e .a6 + e .a2 * e .a3 * e .a3 - e .a4 * e .a4 ) - 8 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 3 - 27 * (e .a3 * e .a3 + 4 * e .a6 ) * (e .a3 * e .a3 + 4 * e .a6 ) + 9 * (e .a1 * e .a1 + 4 * e .a2 ) * (e .a1 * e .a3 + 2 * e .a4 ) * (e .a3 * e .a3 + 4 * e .a6 ) = - (432 * e .a6 ^ 2 ) + (288 * e .a2 * e .a4 * e .a6 - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 ) )
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 )simp only [ sub_add_comm' : β {R : Type ?u.241670 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.241694 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.241736 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.241746 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.241766 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.241780 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.241792 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.241804 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.241816 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul] 9 * (e .a1 * e .a1 ) * (e .a1 * e .a3 ) * (e .a3 * e .a3 ) + 9 * (4 * e .a2 ) * (e .a1 * e .a3 ) * (e .a3 * e .a3 ) + (9 * (e .a1 * e .a1 ) * (2 * e .a4 ) * (e .a3 * e .a3 ) + 9 * (4 * e .a2 ) * (2 * e .a4 ) * (e .a3 * e .a3 ) ) + (9 * (e .a1 * e .a1 ) * (e .a1 * e .a3 ) * (4 * e .a6 ) + 9 * (4 * e .a2 ) * (e .a1 * e .a3 ) * (4 * e .a6 ) + (9 * (e .a1 * e .a1 ) * (2 * e .a4 ) * (4 * e .a6 ) + 9 * (4 * e .a2 ) * (2 * e .a4 ) * (4 * e .a6 ) ) ) - (e .a1 * e .a1 * (4 * e .a2 ) * (e .a2 * e .a3 * e .a3 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a2 * e .a3 * e .a3 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a2 * e .a3 * e .a3 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a2 * e .a3 * e .a3 ) + e .a1 * e .a1 * (4 * e .a2 ) * (4 * e .a2 * e .a6 ) + (4 * e .a2 * (4 * e .a2 ) * (4 * e .a2 * e .a6 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (4 * e .a2 * e .a6 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (4 * e .a2 * e .a6 ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a1 * e .a1 * e .a6 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a1 * e .a1 * e .a6 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a1 * e .a1 * e .a6 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a1 * e .a1 * e .a6 ) ) ) + (- (e .a1 * e .a1 * (4 * e .a2 ) * (e .a4 * e .a4 ) ) - (4 * e .a2 * (4 * e .a2 ) * (e .a4 * e .a4 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a4 * e .a4 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a4 * e .a4 ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a1 * e .a3 * e .a4 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a1 * e .a3 * e .a4 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a1 * e .a3 * e .a4 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a1 * e .a3 * e .a4 ) ) ) ) + (8 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + (8 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) ) + (8 * (e .a1 * e .a3 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + (8 * (e .a1 * e .a3 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) ) ) ) + (27 * (e .a3 * e .a3 ) * (e .a3 * e .a3 ) + 27 * (4 * e .a6 ) * (e .a3 * e .a3 ) + (27 * (e .a3 * e .a3 ) * (4 * e .a6 ) + 27 * (4 * e .a6 ) * (4 * e .a6 ) ) ) ) ) = 288 * e .a2 * e .a4 * e .a6 - (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a2 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) ) * e .a6 + 8 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + 30 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a4 + 48 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 64 * (e .a2 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) ) * e .a6 + 64 * (e .a4 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) ) + 216 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a6 + 432 * (e .a6 * (e .a6 * e .a6 ^ 0 ) ) - (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) + 8 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) + 16 * e .a1 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * e .a3 * e .a4 + 8 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * e .a2 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 36 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a4 + 16 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * e .a4 * e .a6 ) )
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 )simp only [ eq_sub_iff_add_eq : β {G : Type ?u.244758 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.244782 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm' : β {R : Type ?u.244801 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_add_eq_sub ,
add_sub : β {G : Type ?u.244823 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub, sub_add , β sub_eq_add_neg : β {G : Type ?u.244847 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg] 9 * (e .a1 * e .a1 ) * (e .a1 * e .a3 ) * (e .a3 * e .a3 ) + 9 * (4 * e .a2 ) * (e .a1 * e .a3 ) * (e .a3 * e .a3 ) + (9 * (e .a1 * e .a1 ) * (2 * e .a4 ) * (e .a3 * e .a3 ) + 9 * (4 * e .a2 ) * (2 * e .a4 ) * (e .a3 * e .a3 ) ) + (9 * (e .a1 * e .a1 ) * (e .a1 * e .a3 ) * (4 * e .a6 ) + 9 * (4 * e .a2 ) * (e .a1 * e .a3 ) * (4 * e .a6 ) + (9 * (e .a1 * e .a1 ) * (2 * e .a4 ) * (4 * e .a6 ) + 9 * (4 * e .a2 ) * (2 * e .a4 ) * (4 * e .a6 ) ) ) + (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a2 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) ) * e .a6 + 8 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + 30 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a4 + 48 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 64 * (e .a2 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) ) * e .a6 + 64 * (e .a4 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) ) + 216 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a6 + 432 * (e .a6 * (e .a6 * e .a6 ^ 0 ) ) ) + (4 * e .a2 * (4 * e .a2 ) * (e .a4 * e .a4 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a4 * e .a4 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a4 * e .a4 ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a1 * e .a3 * e .a4 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a1 * e .a3 * e .a4 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a1 * e .a3 * e .a4 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a1 * e .a3 * e .a4 ) ) ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a4 * e .a4 ) = 288 * e .a2 * e .a4 * e .a6 + (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) + 8 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) + 16 * e .a1 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * e .a3 * e .a4 + 8 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * e .a2 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 36 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a4 + 16 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * e .a4 * e .a6 ) + (e .a1 * e .a1 * (4 * e .a2 ) * (e .a2 * e .a3 * e .a3 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a2 * e .a3 * e .a3 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a2 * e .a3 * e .a3 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a2 * e .a3 * e .a3 ) + e .a1 * e .a1 * (4 * e .a2 ) * (4 * e .a2 * e .a6 ) + (4 * e .a2 * (4 * e .a2 ) * (4 * e .a2 * e .a6 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (4 * e .a2 * e .a6 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (4 * e .a2 * e .a6 ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a1 * e .a1 * e .a6 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a1 * e .a1 * e .a6 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a1 * e .a1 * e .a6 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a1 * e .a1 * e .a6 ) ) ) + (8 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + (8 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) ) + (8 * (e .a1 * e .a3 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + (8 * (e .a1 * e .a3 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) ) ) ) + (27 * (e .a3 * e .a3 ) * (e .a3 * e .a3 ) + 27 * (4 * e .a6 ) * (e .a3 * e .a3 ) + (27 * (e .a3 * e .a3 ) * (4 * e .a6 ) + 27 * (4 * e .a6 ) * (4 * e .a6 ) ) ) ) )
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 )simp only [ eq_sub_iff_add_eq : β {G : Type ?u.245213 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.245232 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add] 9 * (e .a1 * e .a1 ) * (e .a1 * e .a3 ) * (e .a3 * e .a3 ) + 9 * (4 * e .a2 ) * (e .a1 * e .a3 ) * (e .a3 * e .a3 ) + (9 * (e .a1 * e .a1 ) * (2 * e .a4 ) * (e .a3 * e .a3 ) + 9 * (4 * e .a2 ) * (2 * e .a4 ) * (e .a3 * e .a3 ) ) + (9 * (e .a1 * e .a1 ) * (e .a1 * e .a3 ) * (4 * e .a6 ) + 9 * (4 * e .a2 ) * (e .a1 * e .a3 ) * (4 * e .a6 ) + (9 * (e .a1 * e .a1 ) * (2 * e .a4 ) * (4 * e .a6 ) + 9 * (4 * e .a2 ) * (2 * e .a4 ) * (4 * e .a6 ) ) ) + (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a2 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) ) * e .a6 + 8 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) + 30 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a4 + 48 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 64 * (e .a2 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) ) * e .a6 + 64 * (e .a4 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) ) + 216 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a6 + 432 * (e .a6 * (e .a6 * e .a6 ^ 0 ) ) ) + (4 * e .a2 * (4 * e .a2 ) * (e .a4 * e .a4 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a4 * e .a4 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a4 * e .a4 ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a1 * e .a3 * e .a4 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a1 * e .a3 * e .a4 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a1 * e .a3 * e .a4 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a1 * e .a3 * e .a4 ) ) ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a4 * e .a4 ) = 288 * e .a2 * e .a4 * e .a6 + (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) + 8 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) ) + 16 * e .a1 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * e .a3 * e .a4 + 8 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * e .a2 * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 36 * (e .a1 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * (e .a3 * e .a3 ^ 0 ) ) * e .a4 + 16 * (e .a2 * (e .a2 * e .a2 ^ 0 ) ) * (e .a4 * (e .a4 * e .a4 ^ 0 ) ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * (e .a1 * e .a1 ^ 0 ) ) * e .a4 * e .a6 ) + (e .a1 * e .a1 * (4 * e .a2 ) * (e .a2 * e .a3 * e .a3 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a2 * e .a3 * e .a3 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a2 * e .a3 * e .a3 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a2 * e .a3 * e .a3 ) + e .a1 * e .a1 * (4 * e .a2 ) * (4 * e .a2 * e .a6 ) + (4 * e .a2 * (4 * e .a2 ) * (4 * e .a2 * e .a6 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (4 * e .a2 * e .a6 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (4 * e .a2 * e .a6 ) + e .a1 * e .a1 * (4 * e .a2 ) * (e .a1 * e .a1 * e .a6 ) + (4 * e .a2 * (4 * e .a2 ) * (e .a1 * e .a1 * e .a6 ) + e .a1 * e .a1 * (e .a1 * e .a1 ) * (e .a1 * e .a1 * e .a6 ) + 4 * e .a2 * (e .a1 * e .a1 ) * (e .a1 * e .a1 * e .a6 ) ) ) + (8 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + (8 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) ) + (8 * (e .a1 * e .a3 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (e .a1 * e .a3 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + (8 * (e .a1 * e .a3 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) + 8 * (2 * e .a4 * (2 * e .a4 * (2 * e .a4 * (e .a1 * e .a3 + 2 * e .a4 ) ^ 0 ) ) ) ) ) ) + (27 * (e .a3 * e .a3 ) * (e .a3 * e .a3 ) + 27 * (4 * e .a6 ) * (e .a3 * e .a3 ) + (27 * (e .a3 * e .a3 ) * (4 * e .a6 ) + 27 * (4 * e .a6 ) * (4 * e .a6 ) ) ) ) )
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 )ring
open ring_neg in
set_option maxHeartbeats 2000000 in
lemma discr_in_jacobian_ideal : β {R : Type u } [inst : IntegralDomain R ] (e : Model R ) (P : R Γ R ),
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P ) discr_in_jacobian_ideal ( e : Model : (R : Type ?u.260085 ) β [inst : IntegralDomain R ] β Type ?u.260085 Model R ) ( P : R Γ R ) : e . discr =
-(( 48 * P . 1 : {Ξ± : Type ?u.260210 } β {Ξ² : Type ?u.260209 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.260216 } β {Ξ² : Type ?u.260215 } β Ξ± Γ Ξ² β Ξ² 2* e . a2 ^ 2 + 24 * e . a1 * e . a2 * e . a6 + 216 * P . 2 : {Ξ± : Type ?u.260280 } β {Ξ² : Type ?u.260279 } β Ξ± Γ Ξ² β Ξ² 2* e . a6 + P . 2 : {Ξ± : Type ?u.260290 } β {Ξ² : Type ?u.260289 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 6 + 11 * P . 2 : {Ξ± : Type ?u.260329 } β {Ξ² : Type ?u.260328 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 4 * e . a2 + P . 1 : {Ξ± : Type ?u.260358 } β {Ξ² : Type ?u.260357 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 4 * e . a3 + 38 * P . 1 : {Ξ± : Type ?u.260403 } β {Ξ² : Type ?u.260402 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 2 * e . a2 * e . a3 + 8 * e . a1 ^ 2 * e . a2 ^ 2 * e . a3
+ e . a1 ^ 4 * e . a2 * e . a3 + 40 * P . 2 : {Ξ± : Type ?u.260530 } β {Ξ² : Type ?u.260529 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 2 * e . a2 ^ 2 + 32 * P . 2 : {Ξ± : Type ?u.260582 } β {Ξ² : Type ?u.260581 } β Ξ± Γ Ξ² β Ξ² 2* e . a2 ^ 3 + 24 * P . 1 : {Ξ± : Type ?u.260624 } β {Ξ² : Type ?u.260623 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.260628 } β {Ξ² : Type ?u.260627 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 * e . a3 + 30 * P . 1 : {Ξ± : Type ?u.260660 } β {Ξ² : Type ?u.260659 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a2 * e . a3 + 3 * P . 1 : {Ξ± : Type ?u.260699 } β {Ξ² : Type ?u.260698 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 3 * e . a4 + 60 * P . 1 : {Ξ± : Type ?u.260744 } β {Ξ² : Type ?u.260743 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a1 * e . a4 + 30 * P . 1 : {Ξ± : Type ?u.260786 } β {Ξ² : Type ?u.260785 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a1 ^ 2 * e . a3
+ 31 * e . a1 ^ 2 * e . a3 * e . a4 + 144 * P . 2 : {Ξ± : Type ?u.260879 } β {Ξ² : Type ?u.260878 } β Ξ± Γ Ξ² β Ξ² 2^ 2 * e . a3 + 198 * P . 2 : {Ξ± : Type ?u.260912 } β {Ξ² : Type ?u.260911 } β Ξ± Γ Ξ² β Ξ² 2* e . a3 ^ 2 + 27 * e . a3 ^ 3 + 60 * e . a1 * e . a4 ^ 2 + 36 * P . 1 : {Ξ± : Type ?u.261015 } β {Ξ² : Type ?u.261014 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 * e . a6 + 76 * P . 1 : {Ξ± : Type ?u.261044 } β {Ξ² : Type ?u.261043 } β Ξ± Γ Ξ² β Ξ± 1* e . a2 ^ 2 * e . a3 + 16 * e . a2 ^ 3 * e . a3 + 84 * P . 1 : {Ξ± : Type ?u.261124 } β {Ξ² : Type ?u.261123 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 * e . a2 * e . a4
-( 36 * e . a3 * e . a6 + P . 1 : {Ξ± : Type ?u.261234 } β {Ξ² : Type ?u.261233 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a1 ^ 5 + P . 1 : {Ξ± : Type ?u.261270 } β {Ξ² : Type ?u.261269 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 5 * e . a2 + P . 1 : {Ξ± : Type ?u.261299 } β {Ξ² : Type ?u.261298 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.261303 } β {Ξ² : Type ?u.261302 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 4 + 9 * P . 1 : {Ξ± : Type ?u.261345 } β {Ξ² : Type ?u.261344 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a1 ^ 3 * e . a2 + 10 * P . 1 : {Ξ± : Type ?u.261397 } β {Ξ² : Type ?u.261396 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 3 * e . a2 ^ 2 + e . a1 ^ 5 * e . a4 + 6 * P . 2 : {Ξ± : Type ?u.261474 } β {Ξ² : Type ?u.261473 } β Ξ± Γ Ξ² β Ξ² 2^ 2 * e . a1 ^ 3 + 8 * P . 1 : {Ξ± : Type ?u.261526 } β {Ξ² : Type ?u.261525 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.261530 } β {Ξ² : Type ?u.261529 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 2 * e . a2
+ 24 * P . 1 : {Ξ± : Type ?u.261575 } β {Ξ² : Type ?u.261574 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a1 * e . a2 ^ 2 + 32 * P . 1 : {Ξ± : Type ?u.261627 } β {Ξ² : Type ?u.261626 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 * e . a2 ^ 3 + 35 * P . 2 : {Ξ± : Type ?u.261669 } β {Ξ² : Type ?u.261668 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 3 * e . a3 + e . a1 ^ 3 * e . a3 ^ 2 + 9 * e . a1 ^ 3 * e . a2 * e . a4 + 48 * P . 2 : {Ξ± : Type ?u.261790 } β {Ξ² : Type ?u.261789 } β Ξ± Γ Ξ² β Ξ² 2^ 2 * e . a1 * e . a2 + 134 * P . 2 : {Ξ± : Type ?u.261832 } β {Ξ² : Type ?u.261831 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 * e . a2 * e . a3 + 27 * P . 1 : {Ξ± : Type ?u.261864 } β {Ξ² : Type ?u.261863 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 * e . a3 ^ 2 + 36 * e . a1 * e . a2 * e . a3 ^ 2
+ 58 * P . 2 : {Ξ± : Type ?u.261947 } β {Ξ² : Type ?u.261946 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 2 * e . a4 + 24 * e . a1 * e . a2 ^ 2 * e . a4 + 144 * P . 1 : {Ξ± : Type ?u.262030 } β {Ξ² : Type ?u.262029 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.262034 } β {Ξ² : Type ?u.262033 } β Ξ± Γ Ξ² β Ξ² 2* e . a4 + 120 * P . 2 : {Ξ± : Type ?u.262060 } β {Ξ² : Type ?u.262059 } β Ξ± Γ Ξ² β Ξ² 2* e . a2 * e . a4 + 168 * P . 1 : {Ξ± : Type ?u.262089 } β {Ξ² : Type ?u.262088 } β Ξ± Γ Ξ² β Ξ± 1* e . a3 * e . a4 + 34 * e . a2 * e . a3 * e . a4 ))*( dweierstrass_dy e P )
+( e . a1 ^ 2 * e . a3 ^ 2 + 12 * e . a1 ^ 2 * e . a6 + 16 * e . a2 ^ 2 * e . a4 + 32 * P . 1 : {Ξ± : Type ?u.262307 } β {Ξ² : Type ?u.262306 } β Ξ± Γ Ξ² β Ξ± 1* e . a2 ^ 3 + e . a1 ^ 4 * e . a4 + 144 * P . 1 : {Ξ± : Type ?u.262365 } β {Ξ² : Type ?u.262364 } β Ξ± Γ Ξ² β Ξ± 1* e . a6 + 48 * e . a2 * e . a6 + P . 1 : {Ξ± : Type ?u.262400 } β {Ξ² : Type ?u.262399 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 4 * e . a2 + 84 * P . 1 : {Ξ± : Type ?u.262439 } β {Ξ² : Type ?u.262438 } β Ξ± Γ Ξ² β Ξ± 1* e . a3 ^ 2 + 56 * P . 2 : {Ξ± : Type ?u.262478 } β {Ξ² : Type ?u.262477 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 * e . a4 + 8 * e . a1 ^ 2 * e . a2 * e . a4 + 28 * P . 2 : {Ξ± : Type ?u.262548 } β {Ξ² : Type ?u.262547 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 2 * e . a3 + 52 * P . 2 : {Ξ± : Type ?u.262590 } β {Ξ² : Type ?u.262589 } β Ξ± Γ Ξ² β Ξ² 2* e . a2 * e . a3
+ 96 * P . 1 : {Ξ± : Type ?u.262619 } β {Ξ² : Type ?u.262618 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.262623 } β {Ξ² : Type ?u.262622 } β Ξ± Γ Ξ² β Ξ² 2* e . a3 + 8 * P . 1 : {Ξ± : Type ?u.262649 } β {Ξ² : Type ?u.262648 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 2 * e . a2 ^ 2 + 38 * e . a2 * e . a3 ^ 2 + 32 * P . 1 : {Ξ± : Type ?u.262739 } β {Ξ² : Type ?u.262738 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a2 ^ 2
-( 2 * P . 1 : {Ξ± : Type ?u.262824 } β {Ξ² : Type ?u.262823 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 ^ 3 * e . a3 + 112 * P . 1 : {Ξ± : Type ?u.262866 } β {Ξ² : Type ?u.262865 } β Ξ± Γ Ξ² β Ξ± 1* e . a2 * e . a4 + e . a1 ^ 3 * e . a2 * e . a3 + 36 * e . a1 * e . a3 * e . a4 + 96 * P . 1 : {Ξ± : Type ?u.262951 } β {Ξ² : Type ?u.262950 } β Ξ± Γ Ξ² β Ξ± 1^ 2 * e . a4 + 32 * P . 1 : {Ξ± : Type ?u.262990 } β {Ξ² : Type ?u.262989 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.262994 } β {Ξ² : Type ?u.262993 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 * e . a2 + 32 * P . 2 : {Ξ± : Type ?u.263023 } β {Ξ² : Type ?u.263022 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 * e . a2 ^ 2 + 64 * e . a4 ^ 2
+ 4 * P . 1 : {Ξ± : Type ?u.263094 } β {Ξ² : Type ?u.263093 } β Ξ± Γ Ξ² β Ξ± 1* P . 2 : {Ξ± : Type ?u.263098 } β {Ξ² : Type ?u.263097 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 3 + 10 * P . 2 : {Ξ± : Type ?u.263137 } β {Ξ² : Type ?u.263136 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 3 * e . a2 + P . 2 : {Ξ± : Type ?u.263163 } β {Ξ² : Type ?u.263162 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 5 + 8 * e . a1 * e . a2 ^ 2 * e . a3 + 46 * P . 1 : {Ξ± : Type ?u.263246 } β {Ξ² : Type ?u.263245 } β Ξ± Γ Ξ² β Ξ± 1* e . a1 * e . a2 * e . a3 ))*( dweierstrass_dx e P )
+( 60 * e . a1 ^ 2 * e . a4 + 288 * P . 1 : {Ξ± : Type ?u.263339 } β {Ξ² : Type ?u.263338 } β Ξ± Γ Ξ² β Ξ± 1* e . a4 + 240 * e . a2 * e . a4 + 12 * P . 2 : {Ξ± : Type ?u.263384 } β {Ξ² : Type ?u.263383 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 ^ 3 + 36 * e . a1 ^ 3 * e . a3 + 96 * P . 2 : {Ξ± : Type ?u.263458 } β {Ξ² : Type ?u.263457 } β Ξ± Γ Ξ² β Ξ² 2* e . a1 * e . a2 + 168 * e . a1 * e . a2 * e . a3
-( 432 * e . a6 + e . a1 ^ 6 + 288 * P . 2 : {Ξ± : Type ?u.263565 } β {Ξ² : Type ?u.263564 } β Ξ± Γ Ξ² β Ξ² 2* e . a3 + 252 * e . a3 ^ 2 + 12 * e . a1 ^ 4 * e . a2 + 48 * e . a1 ^ 2 * e . a2 ^ 2 + 96 * P . 1 : {Ξ± : Type ?u.263700 } β {Ξ² : Type ?u.263699 } β Ξ± Γ Ξ² β Ξ± 1* e . a2 ^ 2 + 64 * e . a2 ^ 3 ))*( weierstrass e P ))
:=
by
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )rw [ discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )discr_eq_neg_singular : β {R : Type ?u.557009 } [inst : IntegralDomain R ] (e : Model R ),
discr e = - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 ) discr_eq_neg_singular- (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 ) = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )] - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 ) = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )rw [ - (e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 ) = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )neg_eq_neg_iff : β {R : Type ?u.557042 } [inst : Ring R ] {y z : R }, - z = - y β y = z neg_eq_neg_iff(48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P = e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2 ] (48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P = e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )simp only [ weierstrass , dweierstrass_dx , dweierstrass_dy ] (48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * (2 * P .snd + e .a1 * P .fst + e .a3 ) + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * (e .a1 * P .snd - (3 * P .fst ^ 2 + 2 * e .a2 * P .fst + e .a4 ) ) + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * (P .snd ^ 2 + e .a1 * P .fst * P .snd + e .a3 * P .snd - (P .fst ^ 3 + e .a2 * P .fst ^ 2 + e .a4 * P .fst + e .a6 ) ) = e .a1 ^ 4 * e .a2 * e .a3 ^ 2 - e .a1 ^ 5 * e .a3 * e .a4 + e .a1 ^ 6 * e .a6 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 ^ 2 - e .a1 ^ 3 * e .a3 ^ 3 - 8 * e .a1 ^ 3 * e .a2 * e .a3 * e .a4 - e .a1 ^ 4 * e .a4 ^ 2 + 12 * e .a1 ^ 4 * e .a2 * e .a6 + 16 * e .a2 ^ 3 * e .a3 ^ 2 - 36 * e .a1 * e .a2 * e .a3 ^ 3 - 16 * e .a1 * e .a2 ^ 2 * e .a3 * e .a4 + 30 * e .a1 ^ 2 * e .a3 ^ 2 * e .a4 - 8 * e .a1 ^ 2 * e .a2 * e .a4 ^ 2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 * e .a6 - 36 * e .a1 ^ 3 * e .a3 * e .a6 + 27 * e .a3 ^ 4 - 72 * e .a2 * e .a3 ^ 2 * e .a4 - 16 * e .a2 ^ 2 * e .a4 ^ 2 + 96 * e .a1 * e .a3 * e .a4 ^ 2 + 64 * e .a2 ^ 3 * e .a6 - 144 * e .a1 * e .a2 * e .a3 * e .a6 - 72 * e .a1 ^ 2 * e .a4 * e .a6 + 64 * e .a4 ^ 3 + 216 * e .a3 ^ 2 * e .a6 - 288 * e .a2 * e .a4 * e .a6 + 432 * e .a6 ^ 2
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )simp [ sub_add_comm' : β {R : Type ?u.557330 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.557354 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.557396 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.557406 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.557426 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_sub : β {R : Type ?u.557440 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.557452 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul] (48 * P .fst * P .snd * (e .a2 * e .a2 ) + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * (P .fst * P .fst ) * e .a2 * e .a3 + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 60 * (P .fst * P .fst ) * e .a1 * e .a4 + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 + 144 * (P .snd * P .snd ) * e .a3 + 198 * P .snd * (e .a3 * e .a3 ) + 27 * (e .a3 * (e .a3 * e .a3 ) ) + 60 * e .a1 * (e .a4 * e .a4 ) + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 ) * (2 * P .snd + e .a1 * P .fst + e .a3 ) + ((e .a1 * e .a1 * (e .a3 * e .a3 ) + 12 * (e .a1 * e .a1 ) * e .a6 + 16 * (e .a2 * e .a2 ) * e .a4 + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 84 * P .fst * (e .a3 * e .a3 ) + 56 * P .snd * e .a1 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 38 * e .a2 * (e .a3 * e .a3 ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) ) * (e .a1 * P .snd ) - ((2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * (P .fst * P .fst ) * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) + 64 * (e .a4 * e .a4 ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) * (e .a1 * P .snd ) + ((e .a1 * e .a1 * (e .a3 * e .a3 ) + 12 * (e .a1 * e .a1 ) * e .a6 + 16 * (e .a2 * e .a2 ) * e .a4 + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 84 * P .fst * (e .a3 * e .a3 ) + 56 * P .snd * e .a1 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 38 * e .a2 * (e .a3 * e .a3 ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) ) * (3 * (P .fst * P .fst ) + 2 * e .a2 * P .fst + e .a4 ) - (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * (P .fst * P .fst ) * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) + 64 * (e .a4 * e .a4 ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) * (3 * (P .fst * P .fst ) + 2 * e .a2 * P .fst + e .a4 ) ) ) ) + ((60 * (e .a1 * e .a1 ) * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 ) * (P .snd * P .snd + e .a1 * P .fst * P .snd + e .a3 * P .snd ) - ((432 * e .a6 + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 288 * P .snd * e .a3 + 252 * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 96 * P .fst * (e .a2 * e .a2 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) ) * (P .snd * P .snd + e .a1 * P .fst * P .snd + e .a3 * P .snd ) + ((60 * (e .a1 * e .a1 ) * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 ) * (P .fst * (P .fst * P .fst ) + e .a2 * (P .fst * P .fst ) + e .a4 * P .fst + e .a6 ) - (432 * e .a6 + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 288 * P .snd * e .a3 + 252 * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 96 * P .fst * (e .a2 * e .a2 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) ) * (P .fst * (P .fst * P .fst ) + e .a2 * (P .fst * P .fst ) + e .a4 * P .fst + e .a6 ) ) ) ) - (36 * e .a3 * e .a6 + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 + 48 * (P .snd * P .snd ) * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) * (2 * P .snd + e .a1 * P .fst + e .a3 ) = e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a3 * e .a3 ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a6 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a3 * e .a3 ) + 30 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * e .a4 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * e .a3 ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * e .a4 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * e .a6 + 64 * (e .a4 * (e .a4 * e .a4 ) ) + 216 * (e .a3 * e .a3 ) * e .a6 + 432 * (e .a6 * e .a6 ) - (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * (e .a3 * e .a3 ) ) + 8 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * (e .a4 * e .a4 ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * e .a3 ) ) + 16 * e .a1 * (e .a2 * e .a2 ) * e .a3 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * (e .a4 * e .a4 ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * e .a3 ) * e .a4 + 16 * (e .a2 * e .a2 ) * (e .a4 * e .a4 ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * e .a1 ) * e .a4 * e .a6 + 288 * e .a2 * e .a4 * e .a6 )
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )simp only [ eq_sub_iff_add_eq : β {G : Type ?u.564612 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.564636 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, sub_add_comm' : β {R : Type ?u.564655 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_add_eq_sub ,
add_sub : β {G : Type ?u.564677 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub, sub_add , β sub_eq_add_neg : β {G : Type ?u.564701 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg] (48 * P .fst * P .snd * (e .a2 * e .a2 ) + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * (P .fst * P .fst ) * e .a2 * e .a3 + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 60 * (P .fst * P .fst ) * e .a1 * e .a4 + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 + 144 * (P .snd * P .snd ) * e .a3 + 198 * P .snd * (e .a3 * e .a3 ) + 27 * (e .a3 * (e .a3 * e .a3 ) ) + 60 * e .a1 * (e .a4 * e .a4 ) + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 ) * (2 * P .snd + e .a1 * P .fst + e .a3 ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) + 12 * (e .a1 * e .a1 ) * e .a6 + 16 * (e .a2 * e .a2 ) * e .a4 + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 84 * P .fst * (e .a3 * e .a3 ) + 56 * P .snd * e .a1 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 38 * e .a2 * (e .a3 * e .a3 ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) ) * (e .a1 * P .snd ) + (60 * (e .a1 * e .a1 ) * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 ) * (P .snd * P .snd + e .a1 * P .fst * P .snd + e .a3 * P .snd ) + (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * (e .a3 * e .a3 ) ) + 8 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * (e .a4 * e .a4 ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * e .a3 ) ) + 16 * e .a1 * (e .a2 * e .a2 ) * e .a3 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * (e .a4 * e .a4 ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * e .a3 ) * e .a4 + 16 * (e .a2 * e .a2 ) * (e .a4 * e .a4 ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * e .a1 ) * e .a4 * e .a6 + 288 * e .a2 * e .a4 * e .a6 ) + (432 * e .a6 + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 288 * P .snd * e .a3 + 252 * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 96 * P .fst * (e .a2 * e .a2 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) ) * (P .fst * (P .fst * P .fst ) + e .a2 * (P .fst * P .fst ) + e .a4 * P .fst + e .a6 ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * (P .fst * P .fst ) * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) + 64 * (e .a4 * e .a4 ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) * (3 * (P .fst * P .fst ) + 2 * e .a2 * P .fst + e .a4 ) = e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a3 * e .a3 ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a6 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a3 * e .a3 ) + 30 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * e .a4 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * e .a3 ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * e .a4 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * e .a6 + 64 * (e .a4 * (e .a4 * e .a4 ) ) + 216 * (e .a3 * e .a3 ) * e .a6 + 432 * (e .a6 * e .a6 ) + (36 * e .a3 * e .a6 + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 + 48 * (P .snd * P .snd ) * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) * (2 * P .snd + e .a1 * P .fst + e .a3 ) + ((432 * e .a6 + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 288 * P .snd * e .a3 + 252 * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 96 * P .fst * (e .a2 * e .a2 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) ) * (P .snd * P .snd + e .a1 * P .fst * P .snd + e .a3 * P .snd ) + (60 * (e .a1 * e .a1 ) * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 ) * (P .fst * (P .fst * P .fst ) + e .a2 * (P .fst * P .fst ) + e .a4 * P .fst + e .a6 ) ) + ((2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * (P .fst * P .fst ) * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) + 64 * (e .a4 * e .a4 ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) * (e .a1 * P .snd ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) + 12 * (e .a1 * e .a1 ) * e .a6 + 16 * (e .a2 * e .a2 ) * e .a4 + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 + 84 * P .fst * (e .a3 * e .a3 ) + 56 * P .snd * e .a1 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) + 38 * e .a2 * (e .a3 * e .a3 ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) ) * (3 * (P .fst * P .fst ) + 2 * e .a2 * P .fst + e .a4 ) )
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )simp only [ sub_add_comm' : β {R : Type ?u.565097 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.565109 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.565139 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.565149 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.565163 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.565177 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.565189 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.565201 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.565213 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul, sub_neg : β {R : Type ?u.565225 } [inst : Ring R ] {y z : R }, y - - z = y + z sub_neg] 48 * P .fst * P .snd * (e .a2 * e .a2 ) * (2 * P .snd ) + 24 * e .a1 * e .a2 * e .a6 * (2 * P .snd ) + 216 * P .snd * e .a6 * (2 * P .snd ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) * (2 * P .snd ) + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (2 * P .snd ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * (2 * P .snd ) + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 * (2 * P .snd ) + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 * (2 * P .snd ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * (2 * P .snd ) + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (2 * P .snd ) + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) * (2 * P .snd ) + 24 * P .fst * P .snd * e .a1 * e .a3 * (2 * P .snd ) + 30 * (P .fst * P .fst ) * e .a2 * e .a3 * (2 * P .snd ) + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (2 * P .snd ) + 60 * (P .fst * P .fst ) * e .a1 * e .a4 * (2 * P .snd ) + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 * (2 * P .snd ) + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 * (2 * P .snd ) + 144 * (P .snd * P .snd ) * e .a3 * (2 * P .snd ) + 198 * P .snd * (e .a3 * e .a3 ) * (2 * P .snd ) + 27 * (e .a3 * (e .a3 * e .a3 ) ) * (2 * P .snd ) + 60 * e .a1 * (e .a4 * e .a4 ) * (2 * P .snd ) + 36 * P .fst * e .a1 * e .a6 * (2 * P .snd ) + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 * (2 * P .snd ) + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 * (2 * P .snd ) + 84 * P .fst * e .a1 * e .a2 * e .a4 * (2 * P .snd ) + (48 * P .fst * P .snd * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + 24 * e .a1 * e .a2 * e .a6 * (e .a1 * P .fst ) + 216 * P .snd * e .a6 * (e .a1 * P .fst ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) * (e .a1 * P .fst ) + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a1 * P .fst ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * (e .a1 * P .fst ) + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 * (e .a1 * P .fst ) + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 * (e .a1 * P .fst ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * (e .a1 * P .fst ) + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .fst ) + 24 * P .fst * P .snd * e .a1 * e .a3 * (e .a1 * P .fst ) + 30 * (P .fst * P .fst ) * e .a2 * e .a3 * (e .a1 * P .fst ) + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (e .a1 * P .fst ) + 60 * (P .fst * P .fst ) * e .a1 * e .a4 * (e .a1 * P .fst ) + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 * (e .a1 * P .fst ) + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 * (e .a1 * P .fst ) + 144 * (P .snd * P .snd ) * e .a3 * (e .a1 * P .fst ) + 198 * P .snd * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 27 * (e .a3 * (e .a3 * e .a3 ) ) * (e .a1 * P .fst ) + 60 * e .a1 * (e .a4 * e .a4 ) * (e .a1 * P .fst ) + 36 * P .fst * e .a1 * e .a6 * (e .a1 * P .fst ) + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 * (e .a1 * P .fst ) + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 * (e .a1 * P .fst ) + 84 * P .fst * e .a1 * e .a2 * e .a4 * (e .a1 * P .fst ) ) + (48 * P .fst * P .snd * (e .a2 * e .a2 ) * e .a3 + 24 * e .a1 * e .a2 * e .a6 * e .a3 + 216 * P .snd * e .a6 * e .a3 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) * e .a3 + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a3 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * e .a3 + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 * e .a3 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 * e .a3 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * e .a3 + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 + 24 * P .fst * P .snd * e .a1 * e .a3 * e .a3 + 30 * (P .fst * P .fst ) * e .a2 * e .a3 * e .a3 + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * e .a3 + 60 * (P .fst * P .fst ) * e .a1 * e .a4 * e .a3 + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 * e .a3 + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 * e .a3 + 144 * (P .snd * P .snd ) * e .a3 * e .a3 + 198 * P .snd * (e .a3 * e .a3 ) * e .a3 + 27 * (e .a3 * (e .a3 * e .a3 ) ) * e .a3 + 60 * e .a1 * (e .a4 * e .a4 ) * e .a3 + 36 * P .fst * e .a1 * e .a6 * e .a3 + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 * e .a3 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 * e .a3 ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * (e .a1 * P .snd ) + 12 * (e .a1 * e .a1 ) * e .a6 * (e .a1 * P .snd ) + 16 * (e .a2 * e .a2 ) * e .a4 * (e .a1 * P .snd ) + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .snd ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (e .a1 * P .snd ) + 144 * P .fst * e .a6 * (e .a1 * P .snd ) + 48 * e .a2 * e .a6 * (e .a1 * P .snd ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a1 * P .snd ) + 84 * P .fst * (e .a3 * e .a3 ) * (e .a1 * P .snd ) + 56 * P .snd * e .a1 * e .a4 * (e .a1 * P .snd ) + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * (e .a1 * P .snd ) + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * (e .a1 * P .snd ) + 52 * P .snd * e .a2 * e .a3 * (e .a1 * P .snd ) + 96 * P .fst * P .snd * e .a3 * (e .a1 * P .snd ) + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a1 * P .snd ) + 38 * e .a2 * (e .a3 * e .a3 ) * (e .a1 * P .snd ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * (e .a1 * P .snd ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (P .snd * P .snd ) + 288 * P .fst * e .a4 * (P .snd * P .snd ) + 240 * e .a2 * e .a4 * (P .snd * P .snd ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (P .snd * P .snd ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (P .snd * P .snd ) + 96 * P .snd * e .a1 * e .a2 * (P .snd * P .snd ) + 168 * e .a1 * e .a2 * e .a3 * (P .snd * P .snd ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a1 * P .fst * P .snd ) + 288 * P .fst * e .a4 * (e .a1 * P .fst * P .snd ) + 240 * e .a2 * e .a4 * (e .a1 * P .fst * P .snd ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a1 * P .fst * P .snd ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a1 * P .fst * P .snd ) + 96 * P .snd * e .a1 * e .a2 * (e .a1 * P .fst * P .snd ) + 168 * e .a1 * e .a2 * e .a3 * (e .a1 * P .fst * P .snd ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a3 * P .snd ) + 288 * P .fst * e .a4 * (e .a3 * P .snd ) + 240 * e .a2 * e .a4 * (e .a3 * P .snd ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a3 * P .snd ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a3 * P .snd ) + 96 * P .snd * e .a1 * e .a2 * (e .a3 * P .snd ) + 168 * e .a1 * e .a2 * e .a3 * (e .a3 * P .snd ) ) ) + (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * (e .a3 * e .a3 ) ) + 8 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * (e .a4 * e .a4 ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * e .a3 ) ) + 16 * e .a1 * (e .a2 * e .a2 ) * e .a3 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * (e .a4 * e .a4 ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * e .a3 ) * e .a4 + 16 * (e .a2 * e .a2 ) * (e .a4 * e .a4 ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * e .a1 ) * e .a4 * e .a6 + 288 * e .a2 * e .a4 * e .a6 ) + (432 * e .a6 * (P .fst * (P .fst * P .fst ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (P .fst * (P .fst * P .fst ) ) + 288 * P .snd * e .a3 * (P .fst * (P .fst * P .fst ) ) + 252 * (e .a3 * e .a3 ) * (P .fst * (P .fst * P .fst ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (P .fst * (P .fst * P .fst ) ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (P .fst * (P .fst * P .fst ) ) + 96 * P .fst * (e .a2 * e .a2 ) * (P .fst * (P .fst * P .fst ) ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (P .fst * (P .fst * P .fst ) ) + (432 * e .a6 * (e .a2 * (P .fst * P .fst ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a2 * (P .fst * P .fst ) ) + 288 * P .snd * e .a3 * (e .a2 * (P .fst * P .fst ) ) + 252 * (e .a3 * e .a3 ) * (e .a2 * (P .fst * P .fst ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a2 * (P .fst * P .fst ) ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a2 * (P .fst * P .fst ) ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a2 * (P .fst * P .fst ) ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a2 * (P .fst * P .fst ) ) ) + (432 * e .a6 * (e .a4 * P .fst ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a4 * P .fst ) + 288 * P .snd * e .a3 * (e .a4 * P .fst ) + 252 * (e .a3 * e .a3 ) * (e .a4 * P .fst ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a4 * P .fst ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a4 * P .fst ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a4 * P .fst ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a4 * P .fst ) ) + (432 * e .a6 * e .a6 + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a6 + 288 * P .snd * e .a3 * e .a6 + 252 * (e .a3 * e .a3 ) * e .a6 + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a6 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a6 + 96 * P .fst * (e .a2 * e .a2 ) * e .a6 + 64 * (e .a2 * (e .a2 * e .a2 ) ) * e .a6 ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (3 * (P .fst * P .fst ) ) + 112 * P .fst * e .a2 * e .a4 * (3 * (P .fst * P .fst ) ) + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * (3 * (P .fst * P .fst ) ) + 36 * e .a1 * e .a3 * e .a4 * (3 * (P .fst * P .fst ) ) + 96 * (P .fst * P .fst ) * e .a4 * (3 * (P .fst * P .fst ) ) + 32 * P .fst * P .snd * e .a1 * e .a2 * (3 * (P .fst * P .fst ) ) + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * (3 * (P .fst * P .fst ) ) + 64 * (e .a4 * e .a4 ) * (3 * (P .fst * P .fst ) ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (3 * (P .fst * P .fst ) ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (3 * (P .fst * P .fst ) ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (3 * (P .fst * P .fst ) ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * (3 * (P .fst * P .fst ) ) + 46 * P .fst * e .a1 * e .a2 * e .a3 * (3 * (P .fst * P .fst ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (2 * e .a2 * P .fst ) + 112 * P .fst * e .a2 * e .a4 * (2 * e .a2 * P .fst ) + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * (2 * e .a2 * P .fst ) + 36 * e .a1 * e .a3 * e .a4 * (2 * e .a2 * P .fst ) + 96 * (P .fst * P .fst ) * e .a4 * (2 * e .a2 * P .fst ) + 32 * P .fst * P .snd * e .a1 * e .a2 * (2 * e .a2 * P .fst ) + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * (2 * e .a2 * P .fst ) + 64 * (e .a4 * e .a4 ) * (2 * e .a2 * P .fst ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (2 * e .a2 * P .fst ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (2 * e .a2 * P .fst ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (2 * e .a2 * P .fst ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * (2 * e .a2 * P .fst ) + 46 * P .fst * e .a1 * e .a2 * e .a3 * (2 * e .a2 * P .fst ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a4 + 112 * P .fst * e .a2 * e .a4 * e .a4 + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * e .a4 + 36 * e .a1 * e .a3 * e .a4 * e .a4 + 96 * (P .fst * P .fst ) * e .a4 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 * e .a4 + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * e .a4 + 64 * (e .a4 * e .a4 ) * e .a4 + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a4 + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * e .a4 + 46 * P .fst * e .a1 * e .a2 * e .a3 * e .a4 ) ) = e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a3 * e .a3 ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a6 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a3 * e .a3 ) + 30 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * e .a4 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * e .a3 ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * e .a4 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * e .a6 + 64 * (e .a4 * (e .a4 * e .a4 ) ) + 216 * (e .a3 * e .a3 ) * e .a6 + 432 * (e .a6 * e .a6 ) + (36 * e .a3 * e .a6 * (2 * P .snd ) + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (2 * P .snd ) + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 * (2 * P .snd ) + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * (2 * P .snd ) + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (2 * P .snd ) + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) * (2 * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 * (2 * P .snd ) + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) * (2 * P .snd ) + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 * (2 * P .snd ) + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) * (2 * P .snd ) + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) * (2 * P .snd ) + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (2 * P .snd ) + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * (2 * P .snd ) + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 * (2 * P .snd ) + 48 * (P .snd * P .snd ) * e .a1 * e .a2 * (2 * P .snd ) + 134 * P .snd * e .a1 * e .a2 * e .a3 * (2 * P .snd ) + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) * (2 * P .snd ) + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) * (2 * P .snd ) + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 * (2 * P .snd ) + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 * (2 * P .snd ) + 144 * P .fst * P .snd * e .a4 * (2 * P .snd ) + 120 * P .snd * e .a2 * e .a4 * (2 * P .snd ) + 168 * P .fst * e .a3 * e .a4 * (2 * P .snd ) + 34 * e .a2 * e .a3 * e .a4 * (2 * P .snd ) + (36 * e .a3 * e .a6 * (e .a1 * P .fst ) + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a1 * P .fst ) + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 * (e .a1 * P .fst ) + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * (e .a1 * P .fst ) + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a1 * P .fst ) + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 * (e .a1 * P .fst ) + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) * (e .a1 * P .fst ) + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 * (e .a1 * P .fst ) + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .fst ) + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a1 * P .fst ) + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 * (e .a1 * P .fst ) + 48 * (P .snd * P .snd ) * e .a1 * e .a2 * (e .a1 * P .fst ) + 134 * P .snd * e .a1 * e .a2 * e .a3 * (e .a1 * P .fst ) + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 * (e .a1 * P .fst ) + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 * (e .a1 * P .fst ) + 144 * P .fst * P .snd * e .a4 * (e .a1 * P .fst ) + 120 * P .snd * e .a2 * e .a4 * (e .a1 * P .fst ) + 168 * P .fst * e .a3 * e .a4 * (e .a1 * P .fst ) + 34 * e .a2 * e .a3 * e .a4 * (e .a1 * P .fst ) ) + (36 * e .a3 * e .a6 * e .a3 + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a3 + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 * e .a3 + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) * e .a3 + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 * e .a3 + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 * e .a3 + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) * e .a3 + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a3 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * e .a3 + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 * e .a3 + 48 * (P .snd * P .snd ) * e .a1 * e .a2 * e .a3 + 134 * P .snd * e .a1 * e .a2 * e .a3 * e .a3 + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) * e .a3 + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) * e .a3 + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 * e .a3 + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 * e .a3 + 144 * P .fst * P .snd * e .a4 * e .a3 + 120 * P .snd * e .a2 * e .a4 * e .a3 + 168 * P .fst * e .a3 * e .a4 * e .a3 + 34 * e .a2 * e .a3 * e .a4 * e .a3 ) ) + (432 * e .a6 * (P .snd * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (P .snd * P .snd ) + 288 * P .snd * e .a3 * (P .snd * P .snd ) + 252 * (e .a3 * e .a3 ) * (P .snd * P .snd ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (P .snd * P .snd ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (P .snd * P .snd ) + 96 * P .fst * (e .a2 * e .a2 ) * (P .snd * P .snd ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (P .snd * P .snd ) + (432 * e .a6 * (e .a1 * P .fst * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a1 * P .fst * P .snd ) + 288 * P .snd * e .a3 * (e .a1 * P .fst * P .snd ) + 252 * (e .a3 * e .a3 ) * (e .a1 * P .fst * P .snd ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a1 * P .fst * P .snd ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a1 * P .fst * P .snd ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a1 * P .fst * P .snd ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .fst * P .snd ) ) + (432 * e .a6 * (e .a3 * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a3 * P .snd ) + 288 * P .snd * e .a3 * (e .a3 * P .snd ) + 252 * (e .a3 * e .a3 ) * (e .a3 * P .snd ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a3 * P .snd ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a3 * P .snd ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a3 * P .snd ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a3 * P .snd ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (P .fst * (P .fst * P .fst ) ) + 288 * P .fst * e .a4 * (P .fst * (P .fst * P .fst ) ) + 240 * e .a2 * e .a4 * (P .fst * (P .fst * P .fst ) ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (P .fst * (P .fst * P .fst ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (P .fst * (P .fst * P .fst ) ) + 96 * P .snd * e .a1 * e .a2 * (P .fst * (P .fst * P .fst ) ) + 168 * e .a1 * e .a2 * e .a3 * (P .fst * (P .fst * P .fst ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a2 * (P .fst * P .fst ) ) + 288 * P .fst * e .a4 * (e .a2 * (P .fst * P .fst ) ) + 240 * e .a2 * e .a4 * (e .a2 * (P .fst * P .fst ) ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * (P .fst * P .fst ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a2 * (P .fst * P .fst ) ) + 96 * P .snd * e .a1 * e .a2 * (e .a2 * (P .fst * P .fst ) ) + 168 * e .a1 * e .a2 * e .a3 * (e .a2 * (P .fst * P .fst ) ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a4 * P .fst ) + 288 * P .fst * e .a4 * (e .a4 * P .fst ) + 240 * e .a2 * e .a4 * (e .a4 * P .fst ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a4 * P .fst ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a4 * P .fst ) + 96 * P .snd * e .a1 * e .a2 * (e .a4 * P .fst ) + 168 * e .a1 * e .a2 * e .a3 * (e .a4 * P .fst ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * e .a6 + 288 * P .fst * e .a4 * e .a6 + 240 * e .a2 * e .a4 * e .a6 + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a6 + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a6 + 96 * P .snd * e .a1 * e .a2 * e .a6 + 168 * e .a1 * e .a2 * e .a3 * e .a6 ) ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a1 * P .snd ) + 112 * P .fst * e .a2 * e .a4 * (e .a1 * P .snd ) + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * (e .a1 * P .snd ) + 36 * e .a1 * e .a3 * e .a4 * (e .a1 * P .snd ) + 96 * (P .fst * P .fst ) * e .a4 * (e .a1 * P .snd ) + 32 * P .fst * P .snd * e .a1 * e .a2 * (e .a1 * P .snd ) + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * (e .a1 * P .snd ) + 64 * (e .a4 * e .a4 ) * (e .a1 * P .snd ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a1 * P .snd ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a1 * P .snd ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a1 * P .snd ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * (e .a1 * P .snd ) + 46 * P .fst * e .a1 * e .a2 * e .a3 * (e .a1 * P .snd ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * (3 * (P .fst * P .fst ) ) + 12 * (e .a1 * e .a1 ) * e .a6 * (3 * (P .fst * P .fst ) ) + 16 * (e .a2 * e .a2 ) * e .a4 * (3 * (P .fst * P .fst ) ) + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * (3 * (P .fst * P .fst ) ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (3 * (P .fst * P .fst ) ) + 144 * P .fst * e .a6 * (3 * (P .fst * P .fst ) ) + 48 * e .a2 * e .a6 * (3 * (P .fst * P .fst ) ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (3 * (P .fst * P .fst ) ) + 84 * P .fst * (e .a3 * e .a3 ) * (3 * (P .fst * P .fst ) ) + 56 * P .snd * e .a1 * e .a4 * (3 * (P .fst * P .fst ) ) + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * (3 * (P .fst * P .fst ) ) + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * (3 * (P .fst * P .fst ) ) + 52 * P .snd * e .a2 * e .a3 * (3 * (P .fst * P .fst ) ) + 96 * P .fst * P .snd * e .a3 * (3 * (P .fst * P .fst ) ) + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (3 * (P .fst * P .fst ) ) + 38 * e .a2 * (e .a3 * e .a3 ) * (3 * (P .fst * P .fst ) ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * (3 * (P .fst * P .fst ) ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * (2 * e .a2 * P .fst ) + 12 * (e .a1 * e .a1 ) * e .a6 * (2 * e .a2 * P .fst ) + 16 * (e .a2 * e .a2 ) * e .a4 * (2 * e .a2 * P .fst ) + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * (2 * e .a2 * P .fst ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (2 * e .a2 * P .fst ) + 144 * P .fst * e .a6 * (2 * e .a2 * P .fst ) + 48 * e .a2 * e .a6 * (2 * e .a2 * P .fst ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (2 * e .a2 * P .fst ) + 84 * P .fst * (e .a3 * e .a3 ) * (2 * e .a2 * P .fst ) + 56 * P .snd * e .a1 * e .a4 * (2 * e .a2 * P .fst ) + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * (2 * e .a2 * P .fst ) + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * (2 * e .a2 * P .fst ) + 52 * P .snd * e .a2 * e .a3 * (2 * e .a2 * P .fst ) + 96 * P .fst * P .snd * e .a3 * (2 * e .a2 * P .fst ) + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (2 * e .a2 * P .fst ) + 38 * e .a2 * (e .a3 * e .a3 ) * (2 * e .a2 * P .fst ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * (2 * e .a2 * P .fst ) ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * e .a4 + 12 * (e .a1 * e .a1 ) * e .a6 * e .a4 + 16 * (e .a2 * e .a2 ) * e .a4 * e .a4 + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * e .a4 + 144 * P .fst * e .a6 * e .a4 + 48 * e .a2 * e .a6 * e .a4 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a4 + 84 * P .fst * (e .a3 * e .a3 ) * e .a4 + 56 * P .snd * e .a1 * e .a4 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * e .a4 + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * e .a4 + 52 * P .snd * e .a2 * e .a3 * e .a4 + 96 * P .fst * P .snd * e .a3 * e .a4 + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a4 + 38 * e .a2 * (e .a3 * e .a3 ) * e .a4 + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * e .a4 ) ) )
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )simp only [ sub_add_comm' : β {R : Type ?u.569623 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', eq_sub_iff_add_eq : β {G : Type ?u.569635 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.569654 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add] 48 * P .fst * P .snd * (e .a2 * e .a2 ) * (2 * P .snd ) + 24 * e .a1 * e .a2 * e .a6 * (2 * P .snd ) + 216 * P .snd * e .a6 * (2 * P .snd ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) * (2 * P .snd ) + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (2 * P .snd ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * (2 * P .snd ) + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 * (2 * P .snd ) + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 * (2 * P .snd ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * (2 * P .snd ) + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (2 * P .snd ) + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) * (2 * P .snd ) + 24 * P .fst * P .snd * e .a1 * e .a3 * (2 * P .snd ) + 30 * (P .fst * P .fst ) * e .a2 * e .a3 * (2 * P .snd ) + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (2 * P .snd ) + 60 * (P .fst * P .fst ) * e .a1 * e .a4 * (2 * P .snd ) + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 * (2 * P .snd ) + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 * (2 * P .snd ) + 144 * (P .snd * P .snd ) * e .a3 * (2 * P .snd ) + 198 * P .snd * (e .a3 * e .a3 ) * (2 * P .snd ) + 27 * (e .a3 * (e .a3 * e .a3 ) ) * (2 * P .snd ) + 60 * e .a1 * (e .a4 * e .a4 ) * (2 * P .snd ) + 36 * P .fst * e .a1 * e .a6 * (2 * P .snd ) + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 * (2 * P .snd ) + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 * (2 * P .snd ) + 84 * P .fst * e .a1 * e .a2 * e .a4 * (2 * P .snd ) + (48 * P .fst * P .snd * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + 24 * e .a1 * e .a2 * e .a6 * (e .a1 * P .fst ) + 216 * P .snd * e .a6 * (e .a1 * P .fst ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) * (e .a1 * P .fst ) + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a1 * P .fst ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * (e .a1 * P .fst ) + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 * (e .a1 * P .fst ) + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 * (e .a1 * P .fst ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * (e .a1 * P .fst ) + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .fst ) + 24 * P .fst * P .snd * e .a1 * e .a3 * (e .a1 * P .fst ) + 30 * (P .fst * P .fst ) * e .a2 * e .a3 * (e .a1 * P .fst ) + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (e .a1 * P .fst ) + 60 * (P .fst * P .fst ) * e .a1 * e .a4 * (e .a1 * P .fst ) + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 * (e .a1 * P .fst ) + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 * (e .a1 * P .fst ) + 144 * (P .snd * P .snd ) * e .a3 * (e .a1 * P .fst ) + 198 * P .snd * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 27 * (e .a3 * (e .a3 * e .a3 ) ) * (e .a1 * P .fst ) + 60 * e .a1 * (e .a4 * e .a4 ) * (e .a1 * P .fst ) + 36 * P .fst * e .a1 * e .a6 * (e .a1 * P .fst ) + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 * (e .a1 * P .fst ) + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 * (e .a1 * P .fst ) + 84 * P .fst * e .a1 * e .a2 * e .a4 * (e .a1 * P .fst ) ) + (48 * P .fst * P .snd * (e .a2 * e .a2 ) * e .a3 + 24 * e .a1 * e .a2 * e .a6 * e .a3 + 216 * P .snd * e .a6 * e .a3 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) ) * e .a3 + 11 * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a3 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * e .a3 + 38 * P .fst * (e .a1 * e .a1 ) * e .a2 * e .a3 * e .a3 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 * e .a3 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * e .a3 + 40 * P .snd * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a3 + 32 * P .snd * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 + 24 * P .fst * P .snd * e .a1 * e .a3 * e .a3 + 30 * (P .fst * P .fst ) * e .a2 * e .a3 * e .a3 + 3 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * e .a3 + 60 * (P .fst * P .fst ) * e .a1 * e .a4 * e .a3 + 30 * (P .fst * P .fst ) * (e .a1 * e .a1 ) * e .a3 * e .a3 + 31 * (e .a1 * e .a1 ) * e .a3 * e .a4 * e .a3 + 144 * (P .snd * P .snd ) * e .a3 * e .a3 + 198 * P .snd * (e .a3 * e .a3 ) * e .a3 + 27 * (e .a3 * (e .a3 * e .a3 ) ) * e .a3 + 60 * e .a1 * (e .a4 * e .a4 ) * e .a3 + 36 * P .fst * e .a1 * e .a6 * e .a3 + 76 * P .fst * (e .a2 * e .a2 ) * e .a3 * e .a3 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 * e .a3 ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * (e .a1 * P .snd ) + 12 * (e .a1 * e .a1 ) * e .a6 * (e .a1 * P .snd ) + 16 * (e .a2 * e .a2 ) * e .a4 * (e .a1 * P .snd ) + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .snd ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (e .a1 * P .snd ) + 144 * P .fst * e .a6 * (e .a1 * P .snd ) + 48 * e .a2 * e .a6 * (e .a1 * P .snd ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a1 * P .snd ) + 84 * P .fst * (e .a3 * e .a3 ) * (e .a1 * P .snd ) + 56 * P .snd * e .a1 * e .a4 * (e .a1 * P .snd ) + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * (e .a1 * P .snd ) + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * (e .a1 * P .snd ) + 52 * P .snd * e .a2 * e .a3 * (e .a1 * P .snd ) + 96 * P .fst * P .snd * e .a3 * (e .a1 * P .snd ) + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a1 * P .snd ) + 38 * e .a2 * (e .a3 * e .a3 ) * (e .a1 * P .snd ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * (e .a1 * P .snd ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (P .snd * P .snd ) + 288 * P .fst * e .a4 * (P .snd * P .snd ) + 240 * e .a2 * e .a4 * (P .snd * P .snd ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (P .snd * P .snd ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (P .snd * P .snd ) + 96 * P .snd * e .a1 * e .a2 * (P .snd * P .snd ) + 168 * e .a1 * e .a2 * e .a3 * (P .snd * P .snd ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a1 * P .fst * P .snd ) + 288 * P .fst * e .a4 * (e .a1 * P .fst * P .snd ) + 240 * e .a2 * e .a4 * (e .a1 * P .fst * P .snd ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a1 * P .fst * P .snd ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a1 * P .fst * P .snd ) + 96 * P .snd * e .a1 * e .a2 * (e .a1 * P .fst * P .snd ) + 168 * e .a1 * e .a2 * e .a3 * (e .a1 * P .fst * P .snd ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a3 * P .snd ) + 288 * P .fst * e .a4 * (e .a3 * P .snd ) + 240 * e .a2 * e .a4 * (e .a3 * P .snd ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a3 * P .snd ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a3 * P .snd ) + 96 * P .snd * e .a1 * e .a2 * (e .a3 * P .snd ) + 168 * e .a1 * e .a2 * e .a3 * (e .a3 * P .snd ) ) ) + (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 * e .a4 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * (e .a3 * e .a3 ) ) + 8 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * (e .a4 * e .a4 ) + 36 * e .a1 * e .a2 * (e .a3 * (e .a3 * e .a3 ) ) + 16 * e .a1 * (e .a2 * e .a2 ) * e .a3 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * (e .a4 * e .a4 ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a6 + 72 * e .a2 * (e .a3 * e .a3 ) * e .a4 + 16 * (e .a2 * e .a2 ) * (e .a4 * e .a4 ) + 144 * e .a1 * e .a2 * e .a3 * e .a6 + 72 * (e .a1 * e .a1 ) * e .a4 * e .a6 + 288 * e .a2 * e .a4 * e .a6 ) + (432 * e .a6 * (P .fst * (P .fst * P .fst ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (P .fst * (P .fst * P .fst ) ) + 288 * P .snd * e .a3 * (P .fst * (P .fst * P .fst ) ) + 252 * (e .a3 * e .a3 ) * (P .fst * (P .fst * P .fst ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (P .fst * (P .fst * P .fst ) ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (P .fst * (P .fst * P .fst ) ) + 96 * P .fst * (e .a2 * e .a2 ) * (P .fst * (P .fst * P .fst ) ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (P .fst * (P .fst * P .fst ) ) + (432 * e .a6 * (e .a2 * (P .fst * P .fst ) ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a2 * (P .fst * P .fst ) ) + 288 * P .snd * e .a3 * (e .a2 * (P .fst * P .fst ) ) + 252 * (e .a3 * e .a3 ) * (e .a2 * (P .fst * P .fst ) ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a2 * (P .fst * P .fst ) ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a2 * (P .fst * P .fst ) ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a2 * (P .fst * P .fst ) ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a2 * (P .fst * P .fst ) ) ) + (432 * e .a6 * (e .a4 * P .fst ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a4 * P .fst ) + 288 * P .snd * e .a3 * (e .a4 * P .fst ) + 252 * (e .a3 * e .a3 ) * (e .a4 * P .fst ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a4 * P .fst ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a4 * P .fst ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a4 * P .fst ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a4 * P .fst ) ) + (432 * e .a6 * e .a6 + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a6 + 288 * P .snd * e .a3 * e .a6 + 252 * (e .a3 * e .a3 ) * e .a6 + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a6 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a6 + 96 * P .fst * (e .a2 * e .a2 ) * e .a6 + 64 * (e .a2 * (e .a2 * e .a2 ) ) * e .a6 ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (3 * (P .fst * P .fst ) ) + 112 * P .fst * e .a2 * e .a4 * (3 * (P .fst * P .fst ) ) + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * (3 * (P .fst * P .fst ) ) + 36 * e .a1 * e .a3 * e .a4 * (3 * (P .fst * P .fst ) ) + 96 * (P .fst * P .fst ) * e .a4 * (3 * (P .fst * P .fst ) ) + 32 * P .fst * P .snd * e .a1 * e .a2 * (3 * (P .fst * P .fst ) ) + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * (3 * (P .fst * P .fst ) ) + 64 * (e .a4 * e .a4 ) * (3 * (P .fst * P .fst ) ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (3 * (P .fst * P .fst ) ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (3 * (P .fst * P .fst ) ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (3 * (P .fst * P .fst ) ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * (3 * (P .fst * P .fst ) ) + 46 * P .fst * e .a1 * e .a2 * e .a3 * (3 * (P .fst * P .fst ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (2 * e .a2 * P .fst ) + 112 * P .fst * e .a2 * e .a4 * (2 * e .a2 * P .fst ) + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * (2 * e .a2 * P .fst ) + 36 * e .a1 * e .a3 * e .a4 * (2 * e .a2 * P .fst ) + 96 * (P .fst * P .fst ) * e .a4 * (2 * e .a2 * P .fst ) + 32 * P .fst * P .snd * e .a1 * e .a2 * (2 * e .a2 * P .fst ) + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * (2 * e .a2 * P .fst ) + 64 * (e .a4 * e .a4 ) * (2 * e .a2 * P .fst ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (2 * e .a2 * P .fst ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (2 * e .a2 * P .fst ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (2 * e .a2 * P .fst ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * (2 * e .a2 * P .fst ) + 46 * P .fst * e .a1 * e .a2 * e .a3 * (2 * e .a2 * P .fst ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a4 + 112 * P .fst * e .a2 * e .a4 * e .a4 + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * e .a4 + 36 * e .a1 * e .a3 * e .a4 * e .a4 + 96 * (P .fst * P .fst ) * e .a4 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 * e .a4 + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * e .a4 + 64 * (e .a4 * e .a4 ) * e .a4 + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a4 + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * e .a4 + 46 * P .fst * e .a1 * e .a2 * e .a3 * e .a4 ) ) = e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a3 * e .a3 ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a6 + 8 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a3 * e .a3 ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a6 + 16 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a3 * e .a3 ) + 30 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * e .a4 + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a6 + 27 * (e .a3 * (e .a3 * (e .a3 * e .a3 ) ) ) + 96 * e .a1 * e .a3 * (e .a4 * e .a4 ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * e .a6 + 64 * (e .a4 * (e .a4 * e .a4 ) ) + 216 * (e .a3 * e .a3 ) * e .a6 + 432 * (e .a6 * e .a6 ) + (36 * e .a3 * e .a6 * (2 * P .snd ) + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (2 * P .snd ) + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 * (2 * P .snd ) + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * (2 * P .snd ) + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (2 * P .snd ) + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) * (2 * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 * (2 * P .snd ) + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) * (2 * P .snd ) + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 * (2 * P .snd ) + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) * (2 * P .snd ) + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) * (2 * P .snd ) + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (2 * P .snd ) + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * (2 * P .snd ) + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 * (2 * P .snd ) + 48 * (P .snd * P .snd ) * e .a1 * e .a2 * (2 * P .snd ) + 134 * P .snd * e .a1 * e .a2 * e .a3 * (2 * P .snd ) + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) * (2 * P .snd ) + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) * (2 * P .snd ) + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 * (2 * P .snd ) + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 * (2 * P .snd ) + 144 * P .fst * P .snd * e .a4 * (2 * P .snd ) + 120 * P .snd * e .a2 * e .a4 * (2 * P .snd ) + 168 * P .fst * e .a3 * e .a4 * (2 * P .snd ) + 34 * e .a2 * e .a3 * e .a4 * (2 * P .snd ) + (36 * e .a3 * e .a6 * (e .a1 * P .fst ) + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a1 * P .fst ) + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 * (e .a1 * P .fst ) + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * (e .a1 * P .fst ) + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a1 * P .fst ) + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 * (e .a1 * P .fst ) + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) * (e .a1 * P .fst ) + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 * (e .a1 * P .fst ) + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) * (e .a1 * P .fst ) + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .fst ) + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a1 * P .fst ) + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 * (e .a1 * P .fst ) + 48 * (P .snd * P .snd ) * e .a1 * e .a2 * (e .a1 * P .fst ) + 134 * P .snd * e .a1 * e .a2 * e .a3 * (e .a1 * P .fst ) + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) * (e .a1 * P .fst ) + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 * (e .a1 * P .fst ) + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 * (e .a1 * P .fst ) + 144 * P .fst * P .snd * e .a4 * (e .a1 * P .fst ) + 120 * P .snd * e .a2 * e .a4 * (e .a1 * P .fst ) + 168 * P .fst * e .a3 * e .a4 * (e .a1 * P .fst ) + 34 * e .a2 * e .a3 * e .a4 * (e .a1 * P .fst ) ) + (36 * e .a3 * e .a6 * e .a3 + P .fst * P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a3 + P .fst * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * e .a2 * e .a3 + P .fst * P .snd * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a3 + 9 * (P .fst * P .fst ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a3 + 10 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * e .a2 ) * e .a3 + e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a4 * e .a3 + 6 * (P .snd * P .snd ) * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 + 8 * P .fst * P .snd * (e .a1 * e .a1 ) * e .a2 * e .a3 + 24 * (P .fst * P .fst ) * e .a1 * (e .a2 * e .a2 ) * e .a3 + 32 * P .fst * e .a1 * (e .a2 * (e .a2 * e .a2 ) ) * e .a3 + 35 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a3 + e .a1 * (e .a1 * e .a1 ) * (e .a3 * e .a3 ) * e .a3 + 9 * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * e .a4 * e .a3 + 48 * (P .snd * P .snd ) * e .a1 * e .a2 * e .a3 + 134 * P .snd * e .a1 * e .a2 * e .a3 * e .a3 + 27 * P .fst * e .a1 * (e .a3 * e .a3 ) * e .a3 + 36 * e .a1 * e .a2 * (e .a3 * e .a3 ) * e .a3 + 58 * P .snd * (e .a1 * e .a1 ) * e .a4 * e .a3 + 24 * e .a1 * (e .a2 * e .a2 ) * e .a4 * e .a3 + 144 * P .fst * P .snd * e .a4 * e .a3 + 120 * P .snd * e .a2 * e .a4 * e .a3 + 168 * P .fst * e .a3 * e .a4 * e .a3 + 34 * e .a2 * e .a3 * e .a4 * e .a3 ) ) + (432 * e .a6 * (P .snd * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (P .snd * P .snd ) + 288 * P .snd * e .a3 * (P .snd * P .snd ) + 252 * (e .a3 * e .a3 ) * (P .snd * P .snd ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (P .snd * P .snd ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (P .snd * P .snd ) + 96 * P .fst * (e .a2 * e .a2 ) * (P .snd * P .snd ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (P .snd * P .snd ) + (432 * e .a6 * (e .a1 * P .fst * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a1 * P .fst * P .snd ) + 288 * P .snd * e .a3 * (e .a1 * P .fst * P .snd ) + 252 * (e .a3 * e .a3 ) * (e .a1 * P .fst * P .snd ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a1 * P .fst * P .snd ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a1 * P .fst * P .snd ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a1 * P .fst * P .snd ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a1 * P .fst * P .snd ) ) + (432 * e .a6 * (e .a3 * P .snd ) + e .a1 * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a3 * P .snd ) + 288 * P .snd * e .a3 * (e .a3 * P .snd ) + 252 * (e .a3 * e .a3 ) * (e .a3 * P .snd ) + 12 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (e .a3 * P .snd ) + 48 * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (e .a3 * P .snd ) + 96 * P .fst * (e .a2 * e .a2 ) * (e .a3 * P .snd ) + 64 * (e .a2 * (e .a2 * e .a2 ) ) * (e .a3 * P .snd ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (P .fst * (P .fst * P .fst ) ) + 288 * P .fst * e .a4 * (P .fst * (P .fst * P .fst ) ) + 240 * e .a2 * e .a4 * (P .fst * (P .fst * P .fst ) ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (P .fst * (P .fst * P .fst ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (P .fst * (P .fst * P .fst ) ) + 96 * P .snd * e .a1 * e .a2 * (P .fst * (P .fst * P .fst ) ) + 168 * e .a1 * e .a2 * e .a3 * (P .fst * (P .fst * P .fst ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a2 * (P .fst * P .fst ) ) + 288 * P .fst * e .a4 * (e .a2 * (P .fst * P .fst ) ) + 240 * e .a2 * e .a4 * (e .a2 * (P .fst * P .fst ) ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a2 * (P .fst * P .fst ) ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a2 * (P .fst * P .fst ) ) + 96 * P .snd * e .a1 * e .a2 * (e .a2 * (P .fst * P .fst ) ) + 168 * e .a1 * e .a2 * e .a3 * (e .a2 * (P .fst * P .fst ) ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * (e .a4 * P .fst ) + 288 * P .fst * e .a4 * (e .a4 * P .fst ) + 240 * e .a2 * e .a4 * (e .a4 * P .fst ) + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a4 * P .fst ) + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a4 * P .fst ) + 96 * P .snd * e .a1 * e .a2 * (e .a4 * P .fst ) + 168 * e .a1 * e .a2 * e .a3 * (e .a4 * P .fst ) ) + (60 * (e .a1 * e .a1 ) * e .a4 * e .a6 + 288 * P .fst * e .a4 * e .a6 + 240 * e .a2 * e .a4 * e .a6 + 12 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a6 + 36 * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * e .a6 + 96 * P .snd * e .a1 * e .a2 * e .a6 + 168 * e .a1 * e .a2 * e .a3 * e .a6 ) ) ) + (2 * P .fst * (e .a1 * (e .a1 * e .a1 ) ) * e .a3 * (e .a1 * P .snd ) + 112 * P .fst * e .a2 * e .a4 * (e .a1 * P .snd ) + e .a1 * (e .a1 * e .a1 ) * e .a2 * e .a3 * (e .a1 * P .snd ) + 36 * e .a1 * e .a3 * e .a4 * (e .a1 * P .snd ) + 96 * (P .fst * P .fst ) * e .a4 * (e .a1 * P .snd ) + 32 * P .fst * P .snd * e .a1 * e .a2 * (e .a1 * P .snd ) + 32 * P .snd * e .a1 * (e .a2 * e .a2 ) * (e .a1 * P .snd ) + 64 * (e .a4 * e .a4 ) * (e .a1 * P .snd ) + 4 * P .fst * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * (e .a1 * P .snd ) + 10 * P .snd * (e .a1 * (e .a1 * e .a1 ) ) * e .a2 * (e .a1 * P .snd ) + P .snd * (e .a1 * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) ) * (e .a1 * P .snd ) + 8 * e .a1 * (e .a2 * e .a2 ) * e .a3 * (e .a1 * P .snd ) + 46 * P .fst * e .a1 * e .a2 * e .a3 * (e .a1 * P .snd ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * (3 * (P .fst * P .fst ) ) + 12 * (e .a1 * e .a1 ) * e .a6 * (3 * (P .fst * P .fst ) ) + 16 * (e .a2 * e .a2 ) * e .a4 * (3 * (P .fst * P .fst ) ) + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * (3 * (P .fst * P .fst ) ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (3 * (P .fst * P .fst ) ) + 144 * P .fst * e .a6 * (3 * (P .fst * P .fst ) ) + 48 * e .a2 * e .a6 * (3 * (P .fst * P .fst ) ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (3 * (P .fst * P .fst ) ) + 84 * P .fst * (e .a3 * e .a3 ) * (3 * (P .fst * P .fst ) ) + 56 * P .snd * e .a1 * e .a4 * (3 * (P .fst * P .fst ) ) + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * (3 * (P .fst * P .fst ) ) + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * (3 * (P .fst * P .fst ) ) + 52 * P .snd * e .a2 * e .a3 * (3 * (P .fst * P .fst ) ) + 96 * P .fst * P .snd * e .a3 * (3 * (P .fst * P .fst ) ) + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (3 * (P .fst * P .fst ) ) + 38 * e .a2 * (e .a3 * e .a3 ) * (3 * (P .fst * P .fst ) ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * (3 * (P .fst * P .fst ) ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * (2 * e .a2 * P .fst ) + 12 * (e .a1 * e .a1 ) * e .a6 * (2 * e .a2 * P .fst ) + 16 * (e .a2 * e .a2 ) * e .a4 * (2 * e .a2 * P .fst ) + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * (2 * e .a2 * P .fst ) + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * (2 * e .a2 * P .fst ) + 144 * P .fst * e .a6 * (2 * e .a2 * P .fst ) + 48 * e .a2 * e .a6 * (2 * e .a2 * P .fst ) + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * (2 * e .a2 * P .fst ) + 84 * P .fst * (e .a3 * e .a3 ) * (2 * e .a2 * P .fst ) + 56 * P .snd * e .a1 * e .a4 * (2 * e .a2 * P .fst ) + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * (2 * e .a2 * P .fst ) + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * (2 * e .a2 * P .fst ) + 52 * P .snd * e .a2 * e .a3 * (2 * e .a2 * P .fst ) + 96 * P .fst * P .snd * e .a3 * (2 * e .a2 * P .fst ) + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * (2 * e .a2 * P .fst ) + 38 * e .a2 * (e .a3 * e .a3 ) * (2 * e .a2 * P .fst ) + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * (2 * e .a2 * P .fst ) ) + (e .a1 * e .a1 * (e .a3 * e .a3 ) * e .a4 + 12 * (e .a1 * e .a1 ) * e .a6 * e .a4 + 16 * (e .a2 * e .a2 ) * e .a4 * e .a4 + 32 * P .fst * (e .a2 * (e .a2 * e .a2 ) ) * e .a4 + e .a1 * (e .a1 * (e .a1 * e .a1 ) ) * e .a4 * e .a4 + 144 * P .fst * e .a6 * e .a4 + 48 * e .a2 * e .a6 * e .a4 + P .fst * (e .a1 * (e .a1 * (e .a1 * e .a1 ) ) ) * e .a2 * e .a4 + 84 * P .fst * (e .a3 * e .a3 ) * e .a4 + 56 * P .snd * e .a1 * e .a4 * e .a4 + 8 * (e .a1 * e .a1 ) * e .a2 * e .a4 * e .a4 + 28 * P .snd * (e .a1 * e .a1 ) * e .a3 * e .a4 + 52 * P .snd * e .a2 * e .a3 * e .a4 + 96 * P .fst * P .snd * e .a3 * e .a4 + 8 * P .fst * (e .a1 * e .a1 ) * (e .a2 * e .a2 ) * e .a4 + 38 * e .a2 * (e .a3 * e .a3 ) * e .a4 + 32 * (P .fst * P .fst ) * (e .a2 * e .a2 ) * e .a4 ) ) )
discr e = - ((48 * P .fst * P .snd * e .a2 ^ 2 + 24 * e .a1 * e .a2 * e .a6 + 216 * P .snd * e .a6 + P .snd * e .a1 ^ 6 + 11 * P .snd * e .a1 ^ 4 * e .a2 + P .fst * e .a1 ^ 4 * e .a3 + 38 * P .fst * e .a1 ^ 2 * e .a2 * e .a3 + 8 * e .a1 ^ 2 * e .a2 ^ 2 * e .a3 + e .a1 ^ 4 * e .a2 * e .a3 + 40 * P .snd * e .a1 ^ 2 * e .a2 ^ 2 + 32 * P .snd * e .a2 ^ 3 + 24 * P .fst * P .snd * e .a1 * e .a3 + 30 * P .fst ^ 2 * e .a2 * e .a3 + 3 * P .fst * e .a1 ^ 3 * e .a4 + 60 * P .fst ^ 2 * e .a1 * e .a4 + 30 * P .fst ^ 2 * e .a1 ^ 2 * e .a3 + 31 * e .a1 ^ 2 * e .a3 * e .a4 + 144 * P .snd ^ 2 * e .a3 + 198 * P .snd * e .a3 ^ 2 + 27 * e .a3 ^ 3 + 60 * e .a1 * e .a4 ^ 2 + 36 * P .fst * e .a1 * e .a6 + 76 * P .fst * e .a2 ^ 2 * e .a3 + 16 * e .a2 ^ 3 * e .a3 + 84 * P .fst * e .a1 * e .a2 * e .a4 - (36 * e .a3 * e .a6 + P .fst ^ 2 * e .a1 ^ 5 + P .fst * e .a1 ^ 5 * e .a2 + P .fst * P .snd * e .a1 ^ 4 + 9 * P .fst ^ 2 * e .a1 ^ 3 * e .a2 + 10 * P .fst * e .a1 ^ 3 * e .a2 ^ 2 + e .a1 ^ 5 * e .a4 + 6 * P .snd ^ 2 * e .a1 ^ 3 + 8 * P .fst * P .snd * e .a1 ^ 2 * e .a2 + 24 * P .fst ^ 2 * e .a1 * e .a2 ^ 2 + 32 * P .fst * e .a1 * e .a2 ^ 3 + 35 * P .snd * e .a1 ^ 3 * e .a3 + e .a1 ^ 3 * e .a3 ^ 2 + 9 * e .a1 ^ 3 * e .a2 * e .a4 + 48 * P .snd ^ 2 * e .a1 * e .a2 + 134 * P .snd * e .a1 * e .a2 * e .a3 + 27 * P .fst * e .a1 * e .a3 ^ 2 + 36 * e .a1 * e .a2 * e .a3 ^ 2 + 58 * P .snd * e .a1 ^ 2 * e .a4 + 24 * e .a1 * e .a2 ^ 2 * e .a4 + 144 * P .fst * P .snd * e .a4 + 120 * P .snd * e .a2 * e .a4 + 168 * P .fst * e .a3 * e .a4 + 34 * e .a2 * e .a3 * e .a4 ) ) * dweierstrass_dy e P + (e .a1 ^ 2 * e .a3 ^ 2 + 12 * e .a1 ^ 2 * e .a6 + 16 * e .a2 ^ 2 * e .a4 + 32 * P .fst * e .a2 ^ 3 + e .a1 ^ 4 * e .a4 + 144 * P .fst * e .a6 + 48 * e .a2 * e .a6 + P .fst * e .a1 ^ 4 * e .a2 + 84 * P .fst * e .a3 ^ 2 + 56 * P .snd * e .a1 * e .a4 + 8 * e .a1 ^ 2 * e .a2 * e .a4 + 28 * P .snd * e .a1 ^ 2 * e .a3 + 52 * P .snd * e .a2 * e .a3 + 96 * P .fst * P .snd * e .a3 + 8 * P .fst * e .a1 ^ 2 * e .a2 ^ 2 + 38 * e .a2 * e .a3 ^ 2 + 32 * P .fst ^ 2 * e .a2 ^ 2 - (2 * P .fst * e .a1 ^ 3 * e .a3 + 112 * P .fst * e .a2 * e .a4 + e .a1 ^ 3 * e .a2 * e .a3 + 36 * e .a1 * e .a3 * e .a4 + 96 * P .fst ^ 2 * e .a4 + 32 * P .fst * P .snd * e .a1 * e .a2 + 32 * P .snd * e .a1 * e .a2 ^ 2 + 64 * e .a4 ^ 2 + 4 * P .fst * P .snd * e .a1 ^ 3 + 10 * P .snd * e .a1 ^ 3 * e .a2 + P .snd * e .a1 ^ 5 + 8 * e .a1 * e .a2 ^ 2 * e .a3 + 46 * P .fst * e .a1 * e .a2 * e .a3 ) ) * dweierstrass_dx e P + (60 * e .a1 ^ 2 * e .a4 + 288 * P .fst * e .a4 + 240 * e .a2 * e .a4 + 12 * P .snd * e .a1 ^ 3 + 36 * e .a1 ^ 3 * e .a3 + 96 * P .snd * e .a1 * e .a2 + 168 * e .a1 * e .a2 * e .a3 - (432 * e .a6 + e .a1 ^ 6 + 288 * P .snd * e .a3 + 252 * e .a3 ^ 2 + 12 * e .a1 ^ 4 * e .a2 + 48 * e .a1 ^ 2 * e .a2 ^ 2 + 96 * P .fst * e .a2 ^ 2 + 64 * e .a2 ^ 3 ) ) * weierstrass e P )ring
def var_change : {R : Type u } β [inst : IntegralDomain R ] β R β R β R β R Γ R β R Γ R var_change ( r s t : R ) ( P' : R Γ R ) : R Γ R :=
( P' . 1 : {Ξ± : Type ?u.658271 } β {Ξ² : Type ?u.658270 } β Ξ± Γ Ξ² β Ξ± 1 + r , P' . 2 : {Ξ± : Type ?u.658377 } β {Ξ² : Type ?u.658376 } β Ξ± Γ Ξ² β Ξ² 2 + s * P' . 1 : {Ξ± : Type ?u.658384 } β {Ξ² : Type ?u.658383 } β Ξ± Γ Ξ² β Ξ± 1 + t )
-- TODO probably the proof should be more conceptual
open ring_neg in
theorem weierstrass_iso_eq_var_change ( e : Model : (R : Type ?u.658793 ) β [inst : IntegralDomain R ] β Type ?u.658793 Model R ) ( P : R Γ R ) :
weierstrass ( rst_iso r s t e ) P = weierstrass e ( var_change : {R : Type ?u.658869 } β [inst : IntegralDomain R ] β R β R β R β R Γ R β R Γ R var_change r s t P ) :=
by
simp only [ weierstrass , rst_iso , var_change : {R : Type ?u.658896 } β [inst : IntegralDomain R ] β R β R β R β R Γ R β R Γ R var_change] P .snd ^ 2 + (e .a1 + 2 * s ) * P .fst * P .snd + (e .a3 + r * e .a1 + 2 * t ) * P .snd - (P .fst ^ 3 + (e .a2 - s * e .a1 + 3 * r - s * s ) * P .fst ^ 2 + (e .a4 - s * e .a3 + 2 * r * e .a2 - (t + r * s ) * e .a1 + 3 * r * r - 2 * s * t ) * P .fst + (e .a6 + r * e .a4 + r * r * e .a2 + r * r * r - t * (e .a3 + t + r * e .a1 ) ) ) = (P .snd + s * P .fst + t ) ^ 2 + e .a1 * (P .fst + r ) * (P .snd + s * P .fst + t ) + e .a3 * (P .snd + s * P .fst + t ) - ((P .fst + r ) ^ 3 + e .a2 * (P .fst + r ) ^ 2 + e .a4 * (P .fst + r ) + e .a6 )
-- this is a hacky way to get a version of ring with negs, we expand everything and move
-- the negatives to the other side, to get a purely additive expression
simp only [ sub_add_comm' : β {R : Type ?u.659179 } [inst : Ring R ] {x y z : R }, x - y + z = x + z - y sub_add_comm', neg_pow_three : β {R : Type ?u.659203 } [inst : Ring R ] {y : R }, - y ^ 3 = - (y ^ 3 ) neg_pow_three, neg_add_eq_sub , sub_sub , pow_succ : β {M : Type ?u.659245 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ, β neg_mul_left : β {R : Type ?u.659255 } [inst : Ring R ] (a b : R ), - (a * b ) = - a * b neg_mul_left,
β neg_mul_right : β {R : Type ?u.659275 } [inst : Ring R ] (a b : R ), - (a * b ) = a * - b neg_mul_right, mul_add : β {R : Type ?u.659289 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, add_mul : β {R : Type ?u.659301 } [inst : Distrib R ] (a b c : R ), (a + b ) * c = a * c + b * c add_mul, mul_sub : β {R : Type ?u.659313 } [inst : Ring R ] (a b c : R ), a * (b - c ) = a * b - a * c mul_sub, sub_mul : β {R : Type ?u.659325 } [inst : Ring R ] (a b c : R ), (a - b ) * c = a * c - b * c sub_mul] P .snd * (P .snd * P .snd ^ 0 ) + (e .a1 * P .fst * P .snd + 2 * s * P .fst * P .snd ) + (e .a3 * P .snd + r * e .a1 * P .snd + 2 * t * P .snd ) - (P .fst * (P .fst * (P .fst * P .fst ^ 0 ) ) + (e .a2 * (P .fst * (P .fst * P .fst ^ 0 ) ) + 3 * r * (P .fst * (P .fst * P .fst ^ 0 ) ) - (s * e .a1 * (P .fst * (P .fst * P .fst ^ 0 ) ) + s * s * (P .fst * (P .fst * P .fst ^ 0 ) ) ) ) + (e .a4 * P .fst + 2 * r * e .a2 * P .fst + 3 * r * r * P .fst - (s * e .a3 * P .fst + (t * e .a1 * P .fst + r * s * e .a1 * P .fst ) + 2 * s * t * P .fst ) ) + (e .a6 + r * e .a4 + r * r * e .a2 + r * r * r - (t * e .a3 + t * t + t * (r * e .a1 ) ) ) ) = P .snd * (P .snd * (P .snd + s * P .fst + t ) ^ 0 ) + s * P .fst * (P .snd * (P .snd + s * P .fst + t ) ^ 0 ) + t * (P .snd * (P .snd + s * P .fst + t ) ^ 0 ) + (P .snd * (s * P .fst * (P .snd + s * P .fst + t ) ^ 0 ) + s * P .fst * (s * P .fst * (P .snd + s * P .fst + t ) ^ 0 ) + t * (s * P .fst * (P .snd + s * P .fst + t ) ^ 0 ) ) + (P .snd * (t * (P .snd + s * P .fst + t ) ^ 0 ) + s * P .fst * (t * (P .snd + s * P .fst + t ) ^ 0 ) + t * (t * (P .snd + s * P .fst + t ) ^ 0 ) ) + (e .a1 * P .fst * P .snd + e .a1 * r * P .snd + (e .a1 * P .fst * (s * P .fst ) + e .a1 * r * (s * P .fst ) ) + (e .a1 * P .fst * t + e .a1 * r * t ) ) + (e .a3 * P .snd + e .a3 * (s * P .fst ) + e .a3 * t ) - (P .fst * (P .fst * (P .fst * (P .fst + r ) ^ 0 ) ) + r * (P .fst * (P .fst * (P .fst + r ) ^ 0 ) ) + (P .fst * (r * (P .fst * (P .fst + r ) ^ 0 ) ) + r * (r * (P .fst * (P .fst + r ) ^ 0 ) ) ) + (P .fst * (P .fst * (r * (P .fst + r ) ^ 0 ) ) + r * (P .fst * (r * (P .fst + r ) ^ 0 ) ) + (P .fst * (r * (r * (P .fst + r ) ^ 0 ) ) + r * (r * (r * (P .fst + r ) ^ 0 ) ) ) ) + (e .a2 * (P .fst * (P .fst * (P .fst + r ) ^ 0 ) ) + e .a2 * (r * (P .fst * (P .fst + r ) ^ 0 ) ) + (e .a2 * (P .fst * (r * (P .fst + r ) ^ 0 ) ) + e .a2 * (r * (r * (P .fst + r ) ^ 0 ) ) ) ) + (e .a4 * P .fst + e .a4 * r ) + e .a6 )
simp only [ eq_sub_iff_add_eq : β {G : Type ?u.660395 } [inst : AddGroup G ] {a b c : G }, a = b - c β a + c = b eq_sub_iff_add_eq, sub_eq_iff_eq_add : β {G : Type ?u.660419 } [inst : AddGroup G ] {a b c : G }, a - b = c β a = c + b sub_eq_iff_eq_add, neg_add_eq_sub , add_sub : β {G : Type ?u.660448 } [inst : SubNegMonoid G ] (a b c : G ), a + (b - c ) = a + b - c add_sub, sub_add ] P .snd * (P .snd * P .snd ^ 0 ) + (e .a1 * P .fst * P .snd + 2 * s * P .fst * P .snd ) + (e .a3 * P .snd + r * e .a1 * P .snd + 2 * t * P .snd ) + (P .fst * (P .fst * (P .fst * (P .fst + r ) ^ 0 ) ) + r * (P .fst * (P .fst * (P .fst + r ) ^ 0 ) ) + (P .fst * (r * (P .fst * (P .fst + r ) ^ 0 ) ) + r * (r * (P .fst * (P .fst + r ) ^ 0 ) ) ) + (P .fst * (P .fst * (r * (P .fst + r ) ^ 0 ) ) + r * (P .fst * (r * (P .fst + r ) ^ 0 ) ) + (P .fst * (r * (r * (P .fst + r ) ^ 0 ) ) + r * (r * (r * (P .fst + r ) ^ 0 ) ) ) ) + (e .a2 * (P .fst * (P .fst * (P .fst + r ) ^ 0 ) ) + e .a2 * (r * (P .fst * (P .fst + r ) ^ 0 ) ) + (e .a2 * (P .fst * (r * (P .fst + r ) ^ 0 ) ) + e .a2 * (r * (r * (P .fst + r ) ^ 0 ) ) ) ) + (e .a4 * P .fst + e .a4 * r ) + e .a6 ) + (t * e .a3 + t * t + t * (r * e .a1 ) ) + (s * e .a3 * P .fst + (t * e .a1 * P .fst + r * s * e .a1 * P .fst ) + 2 * s * t * P .fst ) + (s * e .a1 * (P .fst * (P .fst * P .fst ^ 0 ) ) + s * s * (P .fst * (P .fst * P .fst ^ 0 ) ) ) = P .snd * (P .snd * (P .snd + s * P .fst + t ) ^ 0 ) + s * P .fst * (P .snd * (P .snd + s * P .fst + t ) ^ 0 ) + t * (P .snd * (P .snd + s * P .fst + t ) ^ 0 ) + (P .snd * (s * P .fst * (P .snd + s * P .fst + t ) ^ 0 ) + s * P .fst * (s * P .fst * (P .snd + s * P .fst + t ) ^ 0 ) + t * (s * P .fst * (P .snd + s * P .fst + t ) ^ 0 ) ) + (P .snd * (t * (P .snd + s * P .fst + t ) ^ 0 ) + s * P .fst * (t * (P .snd + s * P .fst + t ) ^ 0 ) + t * (t * (P .snd + s * P .fst + t ) ^ 0 ) ) + (e .a1 * P .fst * P .snd + e .a1 * r * P .snd + (e .a1 * P .fst * (s * P .fst ) + e .a1 * r * (s * P .fst ) ) + (e .a1 * P .fst * t + e .a1 * r * t ) ) + (e .a3 * P .snd + e .a3 * (s * P .fst ) + e .a3 * t ) + (P .fst * (P .fst * (P .fst * P .fst ^ 0 ) ) + (e .a2 * (P .fst * (P .fst * P .fst ^ 0 ) ) + 3 * r * (P .fst * (P .fst * P .fst ^ 0 ) ) ) ) + (e .a4 * P .fst + 2 * r * e .a2 * P .fst + 3 * r * r * P .fst ) + (e .a6 + r * e .a4 + r * r * e .a2 + r * r * r )
ring
def rst_triple ( e : Model : (R : Type ?u.668581 ) β [inst : IntegralDomain R ] β Type ?u.668581 Model R ) ( rst : R Γ R Γ R ) : Model : (R : Type ?u.668594 ) β [inst : IntegralDomain R ] β Type ?u.668594 Model R :=
rst_iso rst . fst : {Ξ± : Type ?u.668605 } β {Ξ² : Type ?u.668604 } β Ξ± Γ Ξ² β Ξ± fst rst . snd : {Ξ± : Type ?u.668611 } β {Ξ² : Type ?u.668610 } β Ξ± Γ Ξ² β Ξ² snd. fst : {Ξ± : Type ?u.668615 } β {Ξ² : Type ?u.668614 } β Ξ± Γ Ξ² β Ξ± fst rst . snd : {Ξ± : Type ?u.668619 } β {Ξ² : Type ?u.668618 } β Ξ± Γ Ξ² β Ξ² snd. snd : {Ξ± : Type ?u.668623 } β {Ξ² : Type ?u.668622 } β Ξ± Γ Ξ² β Ξ² snd e
lemma rst_iso_to_triple ( e : Model : (R : Type ?u.668670 ) β [inst : IntegralDomain R ] β Type ?u.668670 Model R ) ( r s t : R ) : rst_iso r s t e = rst_triple e ( r , s , t ) := rfl : β {Ξ± : Sort ?u.668710 } {a : Ξ± }, a = a rfl
end Model
structure ValidModel ( R : Type u ) [ IntegralDomain : Type ?u.668736 β Type ?u.668736
IntegralDomain R ] extends Model : (R : Type ?u.668741 ) β [inst : IntegralDomain R ] β Type ?u.668741 Model R where
discr_not_zero : toModel . discr β 0
namespace ValidModel
instance [ Repr : Type ?u.669149 β Type ?u.669149
Repr R ] : Repr : Type ?u.669152 β Type ?u.669152
Repr ( ValidModel : (R : Type ?u.669153 ) β [inst : IntegralDomain R ] β Type ?u.669153 ValidModel R ) := β¨ Ξ» ( e : ValidModel : (R : Type ?u.669166 ) β [inst : IntegralDomain R ] β Type ?u.669166 ValidModel R ) _ => repr e . toModel β©
-- #eval repr ({a1 := 0,a2 := 0, a3:=0,a4:=0,a6:=1, discr_not_zero := by norm_num : ValidModel β€})
def rst_iso ( r s t : R ) ( e : ValidModel : (R : Type ?u.669258 ) β [inst : IntegralDomain R ] β Type ?u.669258 ValidModel R ) : ValidModel : (R : Type ?u.669265 ) β [inst : IntegralDomain R ] β Type ?u.669265 ValidModel R := {
toModel := Model.rst_iso r s t e . toModel ,
discr_not_zero := by
rw [ Model.rst_discr ]
exact e . discr_not_zero
}
lemma rst_discr_valid ( r s t : R ) ( e : ValidModel : (R : Type ?u.669405 ) β [inst : IntegralDomain R ] β Type ?u.669405 ValidModel R ) : ( rst_iso r s t e ). discr = e . discr :=
Model.rst_discr r s t e . toModel
--more [simp] lemmas
lemma rt_of_a1 ( e : ValidModel : (R : Type ?u.669468 ) β [inst : IntegralDomain R ] β Type ?u.669468 ValidModel R ) ( r t : R ) : ( rst_iso r 0 t e ). a1 = e . a1 :=
by (rst_iso r 0 t e ).toModel .a1 = e .toModel .a1simp only [ rst_iso , Model.rst_iso , mul_zero : β {Mβ : Type ?u.669569 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.669586 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, one_mul : β {M : Type ?u.669600 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma t_of_a2 ( e : ValidModel : (R : Type ?u.670006 ) β [inst : IntegralDomain R ] β Type ?u.670006 ValidModel R ) ( t : R ) : ( rst_iso 0 0 t e ). a2 = e . a2 :=
by (rst_iso 0 0 t e ).toModel .a2 = e .toModel .a2simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.670119 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.670136 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero , mul_zero : β {Mβ : Type ?u.670167 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.670175 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, one_mul : β {M : Type ?u.670189 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma r_of_a2 ( e : ValidModel : (R : Type ?u.670840 ) β [inst : IntegralDomain R ] β Type ?u.670840 ValidModel R ) ( r : R ) : ( rst_iso r 0 0 e ). a2 = e . a2 + 3 * r :=
by (rst_iso r 0 0 e ).toModel .a2 = e .toModel .a2 + 3 * r simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.671160 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.671177 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero , mul_zero : β {Mβ : Type ?u.671208 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.671216 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, one_mul : β {M : Type ?u.671230 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma t_of_a3 ( e : ValidModel : (R : Type ?u.671813 ) β [inst : IntegralDomain R ] β Type ?u.671813 ValidModel R ) ( t : R ) : ( rst_iso 0 0 t e ). a3 = e . a3 + 2 * t :=
by (rst_iso 0 0 t e ).toModel .a3 = e .toModel .a3 + 2 * t simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.672145 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.672162 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero , mul_zero : β {Mβ : Type ?u.672193 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.672201 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, one_mul : β {M : Type ?u.672215 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma r_of_a3 : β (e : ValidModel R ) (r : R ), (rst_iso r 0 0 e ).toModel .a3 = e .toModel .a3 + r * e .toModel .a1 r_of_a3 ( e : ValidModel : (R : Type ?u.672864 ) β [inst : IntegralDomain R ] β Type ?u.672864 ValidModel R ) ( r : R ) : ( rst_iso r 0 0 e ). a3 = e . a3 + r * e . a1 :=
by (rst_iso r 0 0 e ).toModel .a3 = e .toModel .a3 + r * e .toModel .a1simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.673143 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.673160 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero , mul_zero : β {Mβ : Type ?u.673191 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.673199 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, one_mul : β {M : Type ?u.673213 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma t_of_a4 : β (e : ValidModel R ) (t : R ), (rst_iso 0 0 t e ).toModel .a4 = e .toModel .a4 - t * e .toModel .a1 t_of_a4 ( e : ValidModel : (R : Type ?u.673794 ) β [inst : IntegralDomain R ] β Type ?u.673794 ValidModel R ) ( t : R ) : ( rst_iso 0 0 t e ). a4 = e . a4 - t * e . a1 :=
by (rst_iso 0 0 t e ).toModel .a4 = e .toModel .a4 - t * e .toModel .a1simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.674055 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.674072 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero , mul_zero : β {Mβ : Type ?u.674103 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.674111 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, one_mul : β {M : Type ?u.674125 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma r_of_a4 ( e : ValidModel : (R : Type ?u.674772 ) β [inst : IntegralDomain R ] β Type ?u.674772 ValidModel R ) ( r : R ) : ( rst_iso r 0 0 e ). a4 = e . a4 + 2 * r * e . a2 + 3 * r ^ 2 :=
by (rst_iso r 0 0 e ).toModel .a4 = e .toModel .a4 + 2 * r * e .toModel .a2 + 3 * r ^ 2 simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.675474 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.675491 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul,
sub_zero , mul_zero : β {Mβ : Type ?u.675522 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.675530 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, add_zero : β {M : Type ?u.675538 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_assoc : β {G : Type ?u.675552 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc, β pow_two : β {M : Type ?u.675571 } [inst : Monoid M ] (a : M ), a ^ 2 = a * a pow_two r ]
lemma t_of_a6 ( e : ValidModel : (R : Type ?u.676282 ) β [inst : IntegralDomain R ] β Type ?u.676282 ValidModel R ) ( t : R ) : ( rst_iso 0 0 t e ). a6 = e . a6 - t * e . a3 - t ^ 2 :=
by (rst_iso 0 0 t e ).toModel .a6 = e .toModel .a6 - t * e .toModel .a3 - t ^ 2 simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.676736 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.676753 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero , mul_zero : β {Mβ : Type ?u.676784 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero,
one_mul : β {M : Type ?u.676792 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, add_zero : β {M : Type ?u.676800 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_add : β {R : Type ?u.676814 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, β pow_two : β {M : Type ?u.676839 } [inst : Monoid M ] (a : M ), a ^ 2 = a * a pow_two t , sub_eq_add_neg : β {G : Type ?u.676842 } [inst : SubNegMonoid G ] (a b : G ), a - b = a + - b sub_eq_add_neg, neg_add , β add_assoc : β {G : Type ?u.676865 } [inst : AddSemigroup G ] (a b c : G ), a + b + c = a + (b + c ) add_assoc]
lemma r_of_a6 ( e : ValidModel : (R : Type ?u.677947 ) β [inst : IntegralDomain R ] β Type ?u.677947 ValidModel R ) ( r : R ) :
( rst_iso r 0 0 e ). a6 = e . a6 + r * e . a4 + r ^ 2 * e . a2 + r ^ 3 :=
by (rst_iso r 0 0 e ).toModel .a6 = e .toModel .a6 + r * e .toModel .a4 + r ^ 2 * e .toModel .a2 + r ^ 3 simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.678739 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, zero_mul : β {Mβ : Type ?u.678756 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, sub_zero ,
mul_zero : β {Mβ : Type ?u.678787 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.678795 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, add_zero : β {M : Type ?u.678803 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_assoc : β {G : Type ?u.678817 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc, pow_two : β {M : Type ?u.678836 } [inst : Monoid M ] (a : M ), a ^ 2 = a * a pow_two r , pow_succ : β {M : Type ?u.678849 } [inst : Monoid M ] (a : M ) (n : β ), a ^ (n + 1 ) = a * a ^ n pow_succ r , pow_zero : β {M : Type ?u.678856 } [inst : Monoid M ] (a : M ), a ^ 0 = 1 pow_zero, mul_one : β {M : Type ?u.678864 } [inst : MulOneClass M ] (a : M ), a * 1 = a mul_one]
lemma st_of_a1 ( e : ValidModel : (R : Type ?u.679671 ) β [inst : IntegralDomain R ] β Type ?u.679671 ValidModel R ) ( s t : R ) : ( rst_iso 0 s t e ). a1 = e . a1 + 2 * s :=
by (rst_iso 0 s t e ).toModel .a1 = e .toModel .a1 + 2 * s simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.679998 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, mul_zero : β {Mβ : Type ?u.680015 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.680032 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul]
lemma st_of_a2 : β (e : ValidModel R ) (s t : R ), (rst_iso 0 s t e ).toModel .a2 = e .toModel .a2 - s * e .toModel .a1 - s ^ 2 st_of_a2 ( e : ValidModel : (R : Type ?u.680395 ) β [inst : IntegralDomain R ] β Type ?u.680395 ValidModel R ) ( s t : R ) : ( rst_iso 0 s t e ). a2 = e . a2 - s * e . a1 - s ^ 2 :=
by (rst_iso 0 s t e ).toModel .a2 = e .toModel .a2 - s * e .toModel .a1 - s ^ 2 simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.680844 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, mul_zero : β {Mβ : Type ?u.680861 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.680878 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, add_zero : β {M : Type ?u.680886 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_assoc : β {G : Type ?u.680900 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc, β pow_two : β {M : Type ?u.680919 } [inst : Monoid M ] (a : M ), a ^ 2 = a * a pow_two s ]
lemma st_of_a3 ( e : ValidModel : (R : Type ?u.681447 ) β [inst : IntegralDomain R ] β Type ?u.681447 ValidModel R ) ( s t : R ) : ( rst_iso 0 s t e ). a3 = e . a3 + 2 * t :=
by (rst_iso 0 s t e ).toModel .a3 = e .toModel .a3 + 2 * t simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.681774 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, mul_zero : β {Mβ : Type ?u.681791 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.681808 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, add_zero : β {M : Type ?u.681816 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_assoc : β {G : Type ?u.681830 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc, zero_mul : β {Mβ : Type ?u.681848 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul]
lemma st_of_a4 : β (e : ValidModel R ) (s t : R ),
(rst_iso 0 s t e ).toModel .a4 = e .toModel .a4 - s * e .toModel .a3 - t * e .toModel .a1 - 2 * s * t st_of_a4 ( e : ValidModel : (R : Type ?u.682448 ) β [inst : IntegralDomain R ] β Type ?u.682448 ValidModel R ) ( s t : R ) :
( rst_iso 0 s t e ). a4 = e . a4 - s * e . a3 - t * e . a1 - 2 * s * t :=
by (rst_iso 0 s t e ).toModel .a4 = e .toModel .a4 - s * e .toModel .a3 - t * e .toModel .a1 - 2 * s * t simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.682956 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, mul_zero : β {Mβ : Type ?u.682973 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.682990 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul, add_zero : β {M : Type ?u.682998 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_assoc : β {G : Type ?u.683012 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc, zero_mul : β {Mβ : Type ?u.683030 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul]
lemma st_of_a6 ( e : ValidModel : (R : Type ?u.683640 ) β [inst : IntegralDomain R ] β Type ?u.683640 ValidModel R ) ( s t : R ) : ( rst_iso 0 s t e ). a6 = e . a6 - t * e . a3 - t ^ 2 :=
by (rst_iso 0 s t e ).toModel .a6 = e .toModel .a6 - t * e .toModel .a3 - t ^ 2 simp only [ rst_iso , Model.rst_iso , one_pow : β {R : Type ?u.684089 } [inst : Semiring R ] (n : β ), 1 ^ n = 1 one_pow, mul_zero : β {Mβ : Type ?u.684106 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, one_mul : β {M : Type ?u.684123 } [inst : MulOneClass M ] (a : M ), 1 * a = a one_mul,
add_zero : β {M : Type ?u.684131 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, mul_assoc : β {G : Type ?u.684145 } [inst : Semigroup G ] (a b c : G ), a * b * c = a * (b * c ) mul_assoc, β pow_two : β {M : Type ?u.684164 } [inst : Monoid M ] (a : M ), a ^ 2 = a * a pow_two t , zero_mul : β {Mβ : Type ?u.684167 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul, mul_add : β {R : Type ?u.684175 } [inst : Distrib R ] (a b c : R ), a * (b + c ) = a * b + a * c mul_add, sub_sub ]
lemma st_of_b8 ( e : ValidModel : (R : Type ?u.685036 ) β [inst : IntegralDomain R ] β Type ?u.685036 ValidModel R ) ( s t : R ) : ( rst_iso 0 s t e ). b8 = e . b8 := by
rw [ rst_iso , Model.rst_b8 ]
simp only [ mul_zero : β {Mβ : Type ?u.685219 } [self : MonoidWithZero Mβ ] (a : Mβ ), a * 0 = 0 mul_zero, add_zero : β {M : Type ?u.685236 } [inst : AddZeroClass M ] (a : M ), a + 0 = a add_zero, zero_mul : β {Mβ : Type ?u.685250 } [self : MonoidWithZero Mβ ] (a : Mβ ), 0 * a = 0 zero_mul]
def rst_triple ( e : ValidModel : (R : Type ?u.685620 ) β [inst : IntegralDomain R ] β Type ?u.685620 ValidModel R ) ( rst : R Γ R Γ R ) : ValidModel : (R : Type ?u.685633 ) β [inst : IntegralDomain R ] β Type ?u.685633 ValidModel R :=
rst_iso rst . fst : {Ξ± : Type ?u.685644 } β {Ξ² : Type ?u.685643 } β Ξ± Γ Ξ² β Ξ± fst rst . snd : {Ξ± : Type ?u.685650 } β {Ξ² : Type ?u.685649 } β Ξ± Γ Ξ² β Ξ² snd. fst : {Ξ± : Type ?u.685654 } β {Ξ² : Type ?u.685653 } β Ξ± Γ Ξ² β Ξ± fst rst . snd : {Ξ± : Type ?u.685658 } β {Ξ² : Type ?u.685657 } β Ξ± Γ Ξ² β Ξ² snd. snd : {Ξ± : Type ?u.685662 } β {Ξ² : Type ?u.685661 } β Ξ± Γ Ξ² β Ξ² snd e
lemma rst_iso_to_triple ( e : ValidModel : (R : Type ?u.685709 ) β [inst : IntegralDomain R ] β Type ?u.685709 ValidModel R ) ( r s t : R ) : rst_iso r s t e = rst_triple e ( r , s , t ) :=
rfl : β {Ξ± : Sort ?u.685749 } {a : Ξ± }, a = a rfl
end ValidModel
namespace Characteristic
open Classical
variable ( R )
noncomputable
def characteristic := if h : _ then Nat.find ( fun n => n β 0 β§ ( n : R ) = 0 ) h else 0
end Characteristic
namespace Model
namespace Field
variable { p : R }
def is_singular_point ( e : Model : (R : Type ?u.686163 ) β [inst : IntegralDomain R ] β Type ?u.686163 Model R ) ( P : R Γ R ) : Prop :=
weierstrass e P = 0 β§ dweierstrass_dx e P = 0 β§ dweierstrass_dy e P = 0
lemma discr_eq_zero_of_singular Warning: declaration uses 'sorry' ( e : Model : (R : Type ?u.686315 ) β [inst : IntegralDomain R ] β Type ?u.686315 Model R ) { P } ( h : is_singular_point e P ) :
e . discr = 0 := sorry
lemma singular_of_val_discr Warning: declaration uses 'sorry' ( e : Model : (R : Type ?u.686428 ) β [inst : IntegralDomain R ] β Type ?u.686428 Model R ) ( h : e . discr = 0 ) :
β P , is_singular_point e P :=
by
sorry
open Characteristic Classical
/--
Proposition 1.5.4 of Elliptic Curve Handbook, Ian Connell February, 1999,
https://www.math.rug.nl/~top/ian.pdf
-/
noncomputable
def singular_point ( e : Model : (R : Type ?u.686546 ) β [inst : IntegralDomain R ] β Type ?u.686546 Model R ) : R Γ R :=
if e . c4 = 0 then
match characteristic R with
| 2 => ( 0 , 0 )
| 3 => ((- e . b6 ), ( e . a3 - e . b6 * e . a1 ))
| _ => ( 0 , 0 ) --need to fill here
else
(( 18 * e . b6 - e . b2 * e . b4 ), ( e . b2 * e . b5 + 3 * e . b7 ))
-- ((18 * e.b6 - e.b2 * e.b4) / e.c4, (e.b2 * e.b5 + 3 * e.b7) / e.c4)
/--
Proposition 1.5.4 of Elliptic Curve Handbook, Ian Connell February, 1999,
https://www.math.rug.nl/~top/ian.pdf
-/
noncomputable
def move_singular_point_to_origin_triple Warning: declaration uses 'sorry' ( e : Model : (R : Type ?u.687590 ) β [inst : IntegralDomain R ] β Type ?u.687590 Model R ) : R Γ R Γ R :=
sorry
noncomputable
def move_singular_point_to_origin_iso ( e : Model : (R : Type ?u.687622 ) β [inst : IntegralDomain R ] β Type ?u.687622 Model R ) : Model : (R : Type ?u.687629 ) β [inst : IntegralDomain R ] β Type ?u.687629 Model R :=
rst_triple e ( move_singular_point_to_origin_triple : {R : Type ?u.687638 } β [inst : IntegralDomain R ] β Model R β R Γ R Γ R move_singular_point_to_origin_triple e )
lemma move_singular_point_to_origin Warning: declaration uses 'sorry' ( e : Model : (R : Type ?u.687657 ) β [inst : IntegralDomain R ] β Type ?u.687657 Model R ) :
(β P , is_singular_point e P ) β
is_singular_point ( move_singular_point_to_origin_iso e ) ( 0 , 0 ) := by sorry
end Field
end Model